封装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个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...
随机推荐
- Sass与Compress实战:第六章
概要:介绍Compass如何让你从本地开发原型轻松转移到正产环境的网址或Web应用中. 本章内容: ● CSS精灵的历史和基本原则 ● Compass混合器让精灵自动化 ● 自定义精灵图片和CSS输出 ...
- WEB前端开发中的图片压缩
web前端开发中,图片的重要性不言而喻,而由于一些图片的大小加上现在国内的网速不给力等种种原因,我们非常有必要对网站使用的图片进行压缩,压缩图片必然会带来图片质量的损失,我们要尽可能的在质量降低很小的 ...
- 用makecert.exe生成一个自签名的证书
makecert.exe不用去找,安装VS2008后,在开始菜单相应的路径找到该命令提示符:Microsoft Visual Studio 2008/Visual Studio Tools/Visua ...
- 关于 JAVA 中使用 Preferences 读写注册表时要注意的地方
要注意的只有一个地方,那就是键名或者项名不要包含大写字母,否则读不到数据. 代码是这样的: 1: Preferences preferences = Preferences.systemRoot(); ...
- 用 rebar 来构建、编译、测试、发布 Erlang 应用程序
转自:http://dhq.me/build-compile-eunit-release-erlang-application-with-rebar rebar 是一个遵循 Erlang/OTP 原则 ...
- VMware 下的Linux系统远程连接putty
ifconfig查看ip地址 虚拟网卡需要自己新建 nat8 putty不能显示中文的解决办法 http://jingyan.baidu.com/article/5552ef47df8a97518f ...
- 比较全的 C# 操作 Word的代码
using System;using System.Collections.Generic;using System.Text;using Microsoft.Office.Interop.Word; ...
- 使用 NSUserDefaults 读取和写入自定义对象
众所周知,NSUserDefaults只能保存诸如NSArray.NSDictionary.NSData.NSNumber等基本数据类型,如果我们强制保存自定义的类,就会出现这个错误:Attempt ...
- mysql之TIMESTAMP(时间戳)用法详解 [http://www.jb51.net/article/51794.htm]
一.TIMESTAMP的变体 TIMESTAMP时间戳在创建的时候可以有多重不同的特性,如: 1.在创建新记录和修改现有记录的时候都对这个数据列刷新: TIMESTAMP DEFAULT CURREN ...
- caffe+NVIDIA安装+CUDA-7.5+ubuntu14.04(显卡GTX1080)
首先强调,我们实验室的机器是3.3w的机器,老板专门买来给我们搞深度学习,其中显卡是NVIDIA GeForce GTX1080(最近新出的,装了两块),cpu是intel i7处理器3.3Ghz, ...