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. 一行一行分析JQ源码学习笔记-04

    jquery添加方法和属性 jquery.fn=jquery.prototype ={ jquery版本 } construtor  指向修正 js源码中 fun  aaa(){} 会自动生成一句   ...

  2. Java 序列化 transient关键字

    Java 序列化 transient关键字 @author 敏敏Alexia 转自:http://www.cnblogs.com/lanxuezaipiao/p/3369962.html 1. tra ...

  3. Codeforces Round #367 (Div. 2) D. Vasiliy's Multiset

    题目链接:Codeforces Round #367 (Div. 2) D. Vasiliy's Multiset 题意: 给你一些操作,往一个集合插入和删除一些数,然后?x让你找出与x异或后的最大值 ...

  4. 城市字符串----转数组( 加空格---preg_split) 正则分割字符串 --> 成数组

    正则 以 斜杠开始 斜杠 结束   斜杠 包围起来  /  / 字母 反斜杠 转义  \s    space 匹配空格 多个空格 [ \s  ]+   中括号 包围起来 public function ...

  5. openwrt源码下载地址(镜像)

    与openwrt.org的源码svn路径仅仅多了一个.cn svn://svn.openwrt.org.cn/openwrt/branches/backfiresvn://svn.openwrt.or ...

  6. pthread_create线程创建的过程剖析(转)

    概述 在Linux环境下,pthread库提供的pthread_create()API函数,用于创建一个线程.线程创建失败时,它可能会返回ENOMEM或EAGAIN.这篇文章主要讨论线程创建过程中碰到 ...

  7. iOS相关教程

    Xcode Xcode 7中你一定要知道的炸裂调试神技 Xcode 6和Swift中应用程序的国际化和本地化 iOS新版本 兼容iOS 10 资料整理笔记 整理iOS9适配中出现的坑(图文) Swif ...

  8. vs2015打开cshtml文件失败的解决方法

    最近不知道为什么,用vs2015打开cshtml识图文件的时候会报错.也不知道是什么原因,google之后得到解决方法如下: Close VS Delete the content of %Local ...

  9. C/C++ - <string> 与<string.h>、<cstring>的区别

    <string.h><string.h>是C版本的头文件,包含比如strcpy.strcat之类的字符串处理函数. <string><string>是C ...

  10. iOS之多线程NSOperation

    目前在 iOS 和 OS X 中有两套先进的同步 API 可供我们使用:NSOperation 和 GCD .其中 GCD 是基于 C 的底层的 API ,而 NSOperation 则是 GCD 实 ...