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 应用的更多相关文章

  1. Expo大作战(二十九)--expo sdk api之registerRootComponent(注册跟组件),ScreenOrientation(屏幕切换),SecureStore,

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

  2. 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 ...

  3. jQuery.localStorage() - jQuery SDK API

    jQuery.localStorage() - jQuery SDK API jQuery.localStorage() From jQuery SDK API   Jump to: navigati ...

  4. vue中Axios的封装和API接口的管理

    前端小白的声明: 这篇文章为转载:主要是为了方便自己查阅学习.如果对原博主造成侵犯,我会立即删除. 转载地址:点击查看 如图,面对一团糟代码的你~~~真的想说,What F~U~C~K!!! 回归正题 ...

  5. Expo大作战(四十)--expo sdk api之 Calendar,Constants

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

  6. Expo大作战(三十九)--expo sdk api之 DocumentPicker,Contacts(获取手机联系人信息),Branch

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

  7. Expo大作战(三十八)--expo sdk api之 FileSystem(文件操作系统)

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

  8. Expo大作战(三十七)--expo sdk api之 GLView,GestureHandler,Font,Fingerprint,DeviceMotion,Brightness

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

  9. Expo大作战(三十六)--expo sdk api之 ImagePicker,ImageManipulator,Camera

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

随机推荐

  1. lorem ipsum text占位符

    Web开发者通常用lorem ipsum text来做占位符,占位符就是占着位置的一些文字,没有实际意义. 为什么叫lorem ipsum text呢? 是因为lorem ipsum是古罗马西塞罗谚语 ...

  2. 数学#素数筛法 HDU 4548&POJ 2689

    找素数本来是很简单的问题,但当数据变大时,用朴素思想来找素数想必是会超时的,所以用素数筛法. 素数筛法 打表伪代码(用prime数组保存区间内的所有素数): void isPrime() vis[]数 ...

  3. contenteditable模仿textarea文本框

    contenteditable 属性是 HTML5 中的新属性. 例子:<p contenteditable="true" style=" border:solid ...

  4. 官方解答:Vultr VPS常见问题

    VULTR VPS配置高,价格低廉,是非常优秀的vps品牌.今天我来翻译vultr官方FAQ,相信你能找到具体答案. Q 请介绍VULTR VPS机器硬件配置 Intel CPU 3+ GHz Cor ...

  5. DigitalOcean VPS简介

    DigitalOcean是一家位于美国的云主机服务商,总部位于美国纽约,成立于2012年.由于价格低廉,高性能配置.灵活布置的优势,近些年来发展迅猛,成为中国站长圈们喜爱的品牌.(访问http://w ...

  6. java 内部类(摘抄自网络)

    Java内部类 1.内部类分为成员内部类.静态嵌套类.方法内部类.匿名内部类. 几种内部类的共性: A.内部类仍然是一个独立的类,在编译之后会内部类会被编译成独立的.class文件,但是前面冠以外部类 ...

  7. 对http协议断点续传的理解

    断点续传指的是下载传输文件可以中断,之后重新下载时可以接着中断的地方开始下载,而不必从头开始下载.断点续传需要客户端和服务端都支持. 原理是客户端一块一块的请求数据,最后将下载回来的数据块拼接成完整的 ...

  8. 二〇一五年五月二十二日--bug--启动页面出现模糊的问题

    启动页面出现模糊的问题: 原因是 :android:theme="@style/TranslucentTheme" <application android:name=&qu ...

  9. 设计模式--静态工厂设计模式在android中的使用

    今天看到这篇文章:http://www.androiddesignpatterns.com/2012/05/using-newinstance-to-instantiate.html public c ...

  10. 在 Linux 环境下报错 java.lang.reflect.InvocationTargetException

    今天开发了一个 excel 导出数据的功能,放到 linux 服务器上后发现报错. 捕获到 java.lang.reflect.InvocationTargetException 异常,这个异常不太常 ...