封装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个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...
随机推荐
- ORACLE 11g dblink 配置升级
1.如果需要创建全局 DBLink,则需要先确定用户有创建 dblink 的权限: select * from user_sys_privs where privilege like upper('% ...
- Linux入门(五)linux服务器文件远程管理
1 使用filezila远程管理linux服务器文件 filezila下载地址:https://filezilla-project.org/ filezila默认只能登录普通用户,如果想要root用 ...
- hdu_5904_LCIS(DP)
题目链接:hdu_5904_LCIS 题意: 给你两串数,让你找这两串数的最长公共子序列,并且这个最长公共子序列是连续的数值 题解: 我们首先先分别处理出a,b的每个数的最长连续的长度 然后随便找一串 ...
- bug记录_document.defaultview.getcomputedstyle()
页面中使用document.defaultview.getcomputedstyle()在火狐下取不到值. 原本方法现在$(document).ready()中,换到window.onload里就可以 ...
- Ambari安装组件出错
Caught an exception while executing custom service command: <class 'ambari_agent.AgentException.A ...
- tab一些 添加 删除 搜索
tab一些 添加 删除 搜索 案例 <!DOCTYPE html><html lang="en"><head> <meta charset ...
- html的表单表格...
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Openjudge-计算概论(A)-苹果和虫子
描述 你买了一箱n个苹果,很不幸的是买完时箱子里混进了一条虫子.虫子每x小时能吃掉一个苹果,假设虫子在吃完一个苹果之前不会吃另一个,那么经过y小时你还有多少个完整的苹果? 输入输入仅一行,包括n,x和 ...
- java innerclass
---恢复内容开始--- 内部类: public class Inner{ public class Inner2{} } 创建内部类对象 .new public class Test { in ...
- CSSd的优先级别
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...