cocos2d-x应用窗口相关源码剖析2
来源:互联网 发布:淘宝店铺降权有通知吗 编辑:程序博客网 时间:2024/06/07 12:51
2、Win32编程入门(cocos2d-x集成win消息框架基础)
问题1:cocos2d-x应用程序如何创建win窗口?
GetMessage: 从线程的消息队列取出一个消息 ;
TranslateMessage: 将msg结构传给Windows,进行一些转换,比如A键按下,转换成WM_CHAR消息等
DispatchMessage():再将msg结构传给Windows,Windows将该消息发给窗口过程,由窗口过程处理.
GetMessage是从系统为每个应用程序自动分配的消息对列的头部得到一个消息。
TranslateMessage是对一些键盘事件做预处理。
TranslateMessage是翻译需要翻译的消息
DispatchMessage()则会把翻译好的消息发送到系统的消息处理函数中,而这个函数又会把这个消息传递到注册窗体时用户指定的消息处理函数中。翻译消息不是简单的转换,一个消息被翻译后,可能会产生几个消息。实战:
1) 新建项目、win32项目、填写名称及选择项目存储路径;根据 Win32 应用程序向导(windows应用程序),进行项目创建。分析源代码。
2) 注意:项目属性、不适unicode字符集;
3)程序进入点WinMain、窗口类注册与窗口诞生、启动消息循环、回调窗口过程。请仔细分析;点击鼠标或键盘,win处理流程
1、 点击鼠标、鼠标发电信号,给鼠标驱动;
2、 鼠标驱动通过中断,发给win内核;
3、 win内核产生消息队列,并通知响应win应用窗口程序
4、 win应用程序处理消息。对应代码,在winproc回到地方,进行代码处理。
5、 编写键盘点击事件。
以上流程请仔细分析哪些是win操作系统做的,哪些是win应用程序做的。代码模型:
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
// TODO: 在此放置代码。
MSG msg;
HACCEL hAccelTable;
// 初始化全局字符串
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadString(hInstance, IDC_WIN3202, szWindowClass, MAX_LOADSTRING);
MyRegisterClass(hInstance);
// 执行应用程序初始化:
if (!InitInstance (hInstance, nCmdShow))
{
return FALSE;
}
hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WIN3202));
// 主消息循环:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return (int) msg.wParam;
}
//
// 函数: WndProc(HWND, UINT, WPARAM, LPARAM)
//
// 目的: 处理主窗口的消息。
//
// WM_COMMAND - 处理应用程序菜单
// WM_PAINT - 绘制主窗口
// WM_DESTROY - 发送退出消息并返回
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
switch (message)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// 分析菜单选择:
switch (wmId)
{
case IDM_ABOUT:
DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: 在此添加任意绘图代码...
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_KEYDOWN:
MessageBox(hWnd, "bombing lptest", "bombing caption", 0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
- cocos2d-x应用窗口相关源码剖析2
- cocos2d-x应用窗口相关源码剖析1
- bombing:cocos2d-x应用窗口相关源码剖析3
- cocos2d-x应用窗口相关源码剖析4
- cocos2d-x应用窗口相关源码剖析5-其他细节
- cocos2d-x应用窗口相关源码剖析5-其他细节
- 【cocos2d-x 源码剖析】启动窗口
- cocos2d-x 源码剖析(2)
- cocos2d-x源码剖析引子
- cocos2d-x 源码剖析(7)
- cocos2d-x源码剖析之整体框架
- cocos2d-x源码剖析之场景管理
- cocos2d-x源码剖析之精灵对象
- cocos2d-x 源码剖析(1)
- cocos2d-x 源码剖析(3)
- cocos2d-x 源码剖析(4)
- cocos2d-x 源码剖析(5)
- cocos2d-x 源码剖析(6)
- 使用python中的HTTPServer创建本地站点
- 程序调试-新手
- 【iOS】BaseController的用处
- poj-2524 Ubiquitous Religions
- 讲讲Mongodb的24位ObjectId的无损压缩
- cocos2d-x应用窗口相关源码剖析2
- 基础练习 01字串
- 基于CAS实现单点登录(SSO):工作原理
- 更改DataTable中的数据
- C语言中变量声明和定义----笛风读书笔记系列
- 数字图像处理—图像分割—并行区域—连通区域标记(像素标记)(4-连通情况)
- android环境搭建
- java &|~<< 位运算设计权限代码!查询权限、增加权限、删除权限
- 为什么你不当程序员了