封装sdk API 应用

1 #include "QWinApp.h"
2 #include "QGlobal.h"
3 int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
4 {
5 QWinApp* pWinApp = GlbGetApp();
6 //new QWinApp;
7 //pWinApp = GlbGetApp();
8 assert(pWinApp);
9 pWinApp->hInst = hInstance;
10 pWinApp->InitInstance();
11 pWinApp->Run();
12 pWinApp->ExitInstance();
13
14 return TRUE;
15 }


1 #pragma once
2 #include <windows.h>
3 class QWnd
4 {
5 public:
6 QWnd(void);
7 ~QWnd(void);
8 public:
9 HWND m_hWnd;
10 virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
11
12 virtual BOOL CreateEx(DWORD dwExStyle,LPCTSTR lpszClassName,LPCTSTR lpszWindowName, DWORD dwStyle,
13 int x,int y,int nWidth, int nHeight,HWND hWndParent,HMENU nIDorHMenu,LPVOID lpParam = NULL);
14 public:
15 WNDPROC m_lpfnOldWndProc;
16 BOOL ShowWindow(int nCmdShow);
17 BOOL UpdateWindow();
18 BOOL DestroyWindow();
19 public:
20 virtual LRESULT OnClose(WPARAM wParam,LPARAM lParam);
21 virtual LRESULT OnDestroy(WPARAM wParam,LPARAM lParam);
22 virtual LRESULT OnCreate(WPARAM wParam,LPARAM lParam);
23 public:
24 static LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
25 virtual LRESULT WindowProc(UINT uMsg, WPARAM wParam, LPARAM lParam);
26 virtual LRESULT Default(UINT uMsg, WPARAM wParam, LPARAM lParam);
27 BOOL SubClassWindows(HWND hWnd);
28 static QWnd* FromHandle(HWND hWnd);
29 };


1 #include "QWnd.h"
2 LRESULT CALLBACK QWnd::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
3 {
4 if (uMsg == WM_CREATE || uMsg == WM_NCCREATE)
5 {
6 CREATESTRUCT* pCs = (CREATESTRUCT*)lParam;
7 if (pCs)
8 {
9 QWnd* pWnd = (QWnd*)pCs->lpCreateParams;
10 if (pWnd)
11 {
12 pWnd->m_hWnd = hwnd;
13 pWnd->m_lpfnOldWndProc = (WNDPROC)GetWindowLong(hwnd,GWL_WNDPROC);
14 return pWnd->WindowProc(uMsg,wParam,lParam);
15 }
16 }
17 }
18 QWnd* pWnd = (QWnd*)GetWindowLong(hwnd,GWL_USERDATA);
19 if (pWnd)
20 {
21 return pWnd->WindowProc(uMsg,wParam,lParam);
22 }
23
24 return DefWindowProc(hwnd, uMsg, wParam, lParam);
25 }
26 LRESULT QWnd::WindowProc(UINT uMsg, WPARAM wParam, LPARAM lParam)
27 {
28 switch (uMsg)
29 {
30 case WM_CLOSE:
31 {
32 return OnClose(wParam,lParam);
33 }
34 break;
35 case WM_DESTROY:
36 {
37 return OnDestroy(wParam,lParam);
38 }
39 case WM_CREATE:
40 {
41 return OnCreate(wParam,lParam);
42 }
43 break;
44 }
45 return Default(uMsg, wParam, lParam);
46 }
47 LRESULT QWnd::Default(UINT uMsg, WPARAM wParam, LPARAM lParam)
48 {
49 if (m_lpfnOldWndProc == QWnd::WndProc)
50 {
51 return ::DefWindowProc(m_hWnd,uMsg, wParam, lParam);
52 }
53 return m_lpfnOldWndProc(m_hWnd,uMsg, wParam, lParam);
54 }
55 LRESULT QWnd::OnClose(WPARAM wParam,LPARAM lParam)
56 {
57 return Default(WM_CLOSE,wParam,lParam);
58 }
59 LRESULT QWnd::OnCreate(WPARAM wParam,LPARAM lParam)
60 {
61 return Default(WM_CREATE,wParam,lParam);
62 }
63
64 LRESULT QWnd::OnDestroy(WPARAM wParam,LPARAM lParam)
65 {
66 return Default(WM_DESTROY,wParam,lParam);
67 }
68 QWnd::QWnd(void)
69 {
70 m_hWnd =NULL;
71 m_lpfnOldWndProc = NULL;
72 }
73
74 QWnd::~QWnd(void)
75 {
76 }
77 BOOL QWnd::CreateEx( DWORD dwExStyle, LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle,
78 int x, int y, int nWidth, int nHeight, HWND hWndParent, HMENU nIDorHMenu, LPVOID lpParam )
79 {
80 CREATESTRUCT cs;
81 cs.lpCreateParams = lpParam;
82 cs.hInstance = (HINSTANCE)GetModuleHandle(NULL);
83 cs.hMenu = nIDorHMenu;
84 cs.hwndParent = hWndParent;
85 cs.cy = nWidth;
86 cs.cx = nHeight;
87 cs.y = y;
88 cs.x = x;
89 cs.style = dwStyle;
90 cs.lpszName = lpszWindowName;
91 cs.lpszClass = lpszClassName;
92 cs.dwExStyle = dwExStyle;
93 BOOL bRet = PreCreateWindow(cs);
94 if (!bRet)
95 {
96 return FALSE;
97 }
98 HWND hWnd = CreateWindowEx(cs.dwExStyle,cs.lpszClass,cs.lpszName,
99 cs.style,cs.x,cs.y,cs.cx,cs.cy,cs.hwndParent,cs.hMenu,
100 cs.hInstance,this);
101 if (NULL == hWnd)
102 {
103 return FALSE;
104 }
105 m_hWnd =hWnd;
106 SetWindowLong(m_hWnd,GWL_USERDATA,(LONG) this);
107 m_lpfnOldWndProc = (WNDPROC) GetWindowLong(m_hWnd,GWL_WNDPROC);
108 if (m_lpfnOldWndProc == QWnd::WndProc)
109 {
110 //子类化
111 SetWindowLong(m_hWnd,GWL_WNDPROC,(LONG)QWnd::WndProc);
112 WindowProc(WM_CREATE,0,0);
113 WindowProc(WM_NCCREATE,0,0);
114 }
115 return TRUE;
116 }
117 QWnd* FromHandle(HWND hWnd)
118 {
119 QWnd* pWnd =(QWnd*)GetWindowLong(hWnd,GWL_USERDATA);
120 return pWnd;
121 }
122 BOOL QWnd::PreCreateWindow(
123 CREATESTRUCT& cs
124 )
125 {
126 //HINSTANCE hInst = (HINSTANCE)GetModuleHandle(NULL);
127 //assert(hInst);
128 WNDCLASSEX wc = {0};
129 BOOL bRet = GetClassInfoEx(cs.hInstance,cs.lpszClass,&wc);
130 if (bRet)
131 {
132 return TRUE;
133 }
134 //WNDCLASSEX wc = {0};
135 wc.cbClsExtra = 0;
136 wc.cbSize = sizeof(wc);
137 wc.cbWndExtra = 0;
138 wc.hbrBackground = (HBRUSH)GetStockObject(COLOR_HIGHLIGHTTEXT);
139 wc.hCursor = LoadCursor(NULL, MAKEINTRESOURCE(IDC_ARROW));
140 wc.hIcon = LoadIcon(NULL, MAKEINTRESOURCE(IDI_APPLICATION));
141 wc.hIconSm = NULL;
142 wc.hInstance = cs.hInstance;
143 wc.lpfnWndProc = WndProc;
144 wc.lpszClassName = cs.lpszClass;
145 wc.lpszMenuName = NULL;
146 wc.style = CS_HREDRAW | CS_VREDRAW;
147 BOOL bRetClass = RegisterClassEx(&wc);
148 if(!bRetClass)
149 {
150 //MessageBox(NULL, L"Register Class Failed!", NULL, MB_OK);
151 return FALSE;
152 }
153 return TRUE;
154 }
155
156 BOOL QWnd::ShowWindow(int nCmdShow)
157 {
158 return ::ShowWindow(m_hWnd,nCmdShow);
159 }
160 BOOL QWnd::UpdateWindow()
161
162 {
163 return ::UpdateWindow(m_hWnd);
164 }
165
166 BOOL QWnd::DestroyWindow()
167
168 {
169 return ::DestroyWindow(m_hWnd);
170 }
171
172 BOOL QWnd::SubClassWindows(HWND hWnd)
173 {
174 if (m_hWnd == hWnd) return TRUE;
175 m_lpfnOldWndProc = (WNDPROC)GetWindowLong(hWnd,GWL_WNDPROC);
176 if(m_lpfnOldWndProc!=QWnd::WndProc)
177 {
178 m_hWnd =hWnd;
179 SetWindowLong(m_hWnd,GWL_USERDATA,(LONG)this);
180 SetWindowLong(m_hWnd,GWL_WNDPROC,(LONG)QWnd::WndProc);
181 return TRUE;
182 }
183 return FALSE;
184 }

封装sdk API 应用的更多相关文章
- Expo大作战(二十九)--expo sdk api之registerRootComponent(注册跟组件),ScreenOrientation(屏幕切换),SecureStore,
简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...
- Android SDK API (2.2,2.3,3.0)中文版文档
转的一篇.觉得很有用. Android SDK API (2.2,2.3,3.0)中文版文档 地址:http://android.laoguo.org固定连接:http://www.laoguo.or ...
- jQuery.localStorage() - jQuery SDK API
jQuery.localStorage() - jQuery SDK API jQuery.localStorage() From jQuery SDK API Jump to: navigati ...
- vue中Axios的封装和API接口的管理
前端小白的声明: 这篇文章为转载:主要是为了方便自己查阅学习.如果对原博主造成侵犯,我会立即删除. 转载地址:点击查看 如图,面对一团糟代码的你~~~真的想说,What F~U~C~K!!! 回归正题 ...
- Expo大作战(四十)--expo sdk api之 Calendar,Constants
简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...
- Expo大作战(三十九)--expo sdk api之 DocumentPicker,Contacts(获取手机联系人信息),Branch
简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...
- Expo大作战(三十八)--expo sdk api之 FileSystem(文件操作系统)
简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...
- Expo大作战(三十七)--expo sdk api之 GLView,GestureHandler,Font,Fingerprint,DeviceMotion,Brightness
简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...
- Expo大作战(三十六)--expo sdk api之 ImagePicker,ImageManipulator,Camera
简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...
随机推荐
- HDU 1695 GCD#容斥原理
http://acm.hdu.edu.cn/showproblem.php?pid=1695 翻译题目:给五个数a,b,c,d,k,其中恒a=c=1,x∈[a,b],y∈[c,d],求有多少组(x,y ...
- 5.oracle建表的时候同时创建主键,外键,注释,约束,索引
5.oracle建表的时候同时创建主键,外键,注释,约束,索引 1 --主键 )); ) ,constraint aba_pr primary key(id,name1)); --外键 )); --复 ...
- Queues 队列
1. Definiation What is a queue? A queue is a list. With a queue, inseration is done at one end (know ...
- Struts入门学习(一)
刚开始学习框架的时候感觉很简单,都是用到javaEE的相关框架,自己就想研究源码,但是学了很久之后毫无头绪,所以还是扎扎实实学好Struts毕竟框架做起来要比自己写javaEE要简单,下面我们就来一步 ...
- ubuntu 14.04 cagl
libboost-atomic1.-dev libboost-atomic1.-dev libboost-chrono1.-dev libboost-dev libboost-program-opti ...
- HUST 1358 Uiwurerirexb jeqvad(模拟解密)
Uiwurerirexb jeqvad Description Fmur lan oxbrvu mzx, E abpxcay Jvmffabza qdxwfaou eb vmjsad.xdz, eb ...
- Gentoo安装详解(二)-- 编译内核
编译内核: 安装内核源码: 选择内核:如gentoo-sources emerge gentoo-sources ls -l /usr/src/linux 手动编译内核: cd /usr/src/li ...
- REST认识
大家对REST的认识? 谈到REST大家的第一印象就是通过http协议的GET,POST,DELETE,PUT方法实现对url资源的CRUD(创建.读取.更新和删除)操作.比如http://www.a ...
- CentOS 6下的VPN搭建
PPTP 全称为 Point to Point Tunneling Protocol — 点到点隧道协议,是VPN协议中的一种.虚拟专用网(VPN)被定义为通过一个公用网络(通常是因特网)建立一个临时 ...
- 2015 Multi-University Training Contest 6
1001 Average 忍不住又补了一题. 只要枚举1与2之间1给2,2给1,什么都不做三种状态. 后面的情况都已经决定了. (估计只有我比赛的时候把a candy当成a个糖果了吧QAQ) # in ...