Windows编程基础 第四章 windows消息循环原理
2014-09-02 12:44
519 查看
本文是,截图:Windows编程基础 第四章 windows消息循环原理
原文的下载地址是:http://yunpan.cn/cd59fbVfQDUtD 访问密码 bbc0
原文的下载地址是:http://yunpan.cn/cd59fbVfQDUtD 访问密码 bbc0
// windows05.cpp : 定义应用程序的入口点。 // #include "stdafx.h" #include "windows05.h" #include "locale.h" #define WM_MYFIRSTMESSAGE (WM_USER+1) HINSTANCE g_hInst=NULL; HWND g_hButton=NULL; HANDLE g_hConsole=NULL; LRESULT CALLBACK WndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam); // OnCreate() VOID OnCreate(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam) { LPCREATESTRUCT lp=LPCREATESTRUCT(lParam); MessageBox(NULL,lp->lpszClass,TEXT("窗口类的名称:"),MB_OK); g_hButton=CreateWindowEx(0, TEXT("BUTTON"), TEXT("窗口上的按钮!"), WS_CHILD|WS_VISIBLE, 100, 100, 100, 100, hWnd, NULL, g_hInst, NULL); } // OnSize() VOID OnSize(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam) { //The low-order word of lParam specifies the new width of the client area. // The high-order word of lParam specifies the new height of the client area. int nWidth=LOWORD(lParam); int nHeight=HIWORD(lParam); static int nX=0; static int nY=0; TCHAR szText[200]={0}; swprintf_s(szText,TEXT("窗口的宽度:%d,窗口的高度:%d"),nWidth,nHeight); if (g_hButton!=NULL) { nX=(nWidth-100)/2; nY=(nHeight-100)/2; MoveWindow(g_hButton,nX,nY,100,100,TRUE); } MessageBox(NULL,szText,TEXT("窗口客户区大小信息:"),MB_OK); } // OnSysCommand() INT OnSysCommand(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam) { int result; switch(wParam) { case SC_CLOSE: result=MessageBox(hWnd,TEXT("是否关闭窗口?"),TEXT("关闭!"),MB_OKCANCEL); return result; break; } return IDNO; } //WM_PAINT VOID OnPaint(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam) { PAINTSTRUCT ps={0}; HDC hDC=BeginPaint(hWnd,&ps); TCHAR szText5[30]=TEXT("HELLO WM_PAINT!"); //TextOut(hDC,100,100,szText,strlen(szText)); TextOut(hDC,200,200,szText5,_tcslen(szText5)); EndPaint(hWnd,&ps); } BOOL RegisterWnd(TCHAR * pszClassName ) { WNDCLASSEX wce={0}; wce.cbClsExtra=0; wce.cbSize=sizeof(wce); wce.cbWndExtra=0; wce.hbrBackground=(HBRUSH)(COLOR_BTNFACE+1); wce.hCursor=NULL; wce.hIcon=NULL; wce.hIconSm=NULL; wce.hInstance=g_hInst; wce.lpfnWndProc=WndProc; wce.lpszClassName=pszClassName; wce.lpszMenuName=NULL; wce.style=CS_HREDRAW|CS_VREDRAW; ATOM result=RegisterClassEx(&wce); if (result==0) { MessageBox(NULL,L"窗口类注册失败!",L"窗口类注册失败!",MB_OK); return FALSE; } return TRUE; } LRESULT CALLBACK WndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam) { _tsetlocale(LC_ALL,TEXT("chs")); TCHAR szText[100]=TEXT("\nWM_KEYDOWN\n"); TCHAR szText1[100]=TEXT(""); TCHAR szText2[100]=TEXT("\nWM_SYSKEYDOWN\n"); TCHAR szText3[100]=TEXT("\nWM_SYSKEYUP\n"); int result=0; switch(uMsg) { case WM_DESTROY: //PostMessage(hWnd,WM_QUIT,0,0); //SendMessage(hWnd,WM_QUIT,0,0); PostQuitMessage(0); break; case WM_CREATE: OnCreate(hWnd,uMsg,wParam,lParam); SendMessage(hWnd,WM_MYFIRSTMESSAGE,0,0); break; case WM_SIZE: OnSize(hWnd,uMsg,wParam,lParam); break; case WM_SYSCOMMAND: result=OnSysCommand(hWnd,uMsg,wParam,lParam); if (result!=IDOK) { return FALSE; } break; case WM_MYFIRSTMESSAGE: MessageBox(NULL,TEXT("WM_MYFIRSTMESSAGE"),TEXT("我的第一个消息!"),MB_OK); break; case WM_PAINT: OnPaint(hWnd,uMsg,wParam,lParam); break; case WM_KEYDOWN: switch(wParam) { case VK_LEFT: WriteConsole(g_hConsole,szText,_tcslen(szText),0,0); break; case VK_RIGHT: WriteConsole(g_hConsole,szText,_tcslen(szText),0,0); break; case VK_UP: WriteConsole(g_hConsole,szText,_tcslen(szText),0,0); break; case VK_DOWN: WriteConsole(g_hConsole,szText,_tcslen(szText),0,0); break; } break; case WM_SYSKEYDOWN: WriteConsole(g_hConsole,szText2,_tcslen(szText2),0,0); break; case WM_SYSKEYUP: WriteConsole(g_hConsole,szText3,_tcslen(szText3),0,0); break; case WM_CHAR: { _stprintf(szText1,TEXT("您按下的按键是:%c\n"),wParam); WriteConsole(g_hConsole,szText1,_tcslen(szText1),0,0); } break; } return DefWindowProc(hWnd,uMsg,wParam,lParam); } VOID DisplayWindow(HWND hWnd) { ShowWindow(hWnd,SW_SHOW); UpdateWindow(hWnd); } VOID Message() { MSG msg={0}; while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } } HWND CreateMyWindow(TCHAR * pszClassName) { HWND hWndNew=CreateWindowEx(0,pszClassName,L"新建窗口",WS_OVERLAPPEDWINDOW,50,50,400,400,NULL,NULL,g_hInst,NULL); return hWndNew; } VOID NewConsole() { AllocConsole(); g_hConsole=GetStdHandle(STD_OUTPUT_HANDLE); TCHAR szText[50]=TEXT("Debug Messaage:\n"); WriteConsole(g_hConsole,szText,_tcslen(szText),NULL,NULL); } INT WINAPI WinMain( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in LPSTR lpCmdLine, __in int nShowCmd ) { NewConsole(); g_hInst=hInstance; RegisterWnd(TEXT("MyWnd")); HWND hWnd=CreateMyWindow(TEXT("MyWnd")); DisplayWindow(hWnd); Message(); return TRUE; }
相关文章推荐
- windows消息循环原理实例总结
- windows基础应用程序编程(七)鼠标消息
- windows编程(2)深入探讨MFC消息循环和消息泵
- DirectUI中模态对话框和菜单的原理(自己控制整个Windows消息循环。或者,用菜单模拟窗体打开时用SetCapture取得控制权,一旦窗体收到WM_CAPTURECHANGED消息就把窗体退出)
- Windows编程基础--第19节 MFC之自定义消息
- Windows编程基础 第五章 鼠标消息 定时器 菜单
- windows 编程随笔——窗口和信息补充之消息循环
- windows游戏编程 以PeekMessage为核心的消息循环体系
- MFC学习笔记3 Windows编程基础--DialogBox、回调、消息、控件
- windows基础应用程序编程(六)键盘消息
- 1.1 Windows 程序运行原理(消息循环和响应)
- 【Windows编程】Step.2 消息循环机制
- 深度学习基础模型算法原理及编程实现--06.循环神经网络
- Windows编程 从消息窗口到基本窗口 游戏循环窗口框架的简单实现
- windows编程基础篇 -- 消息
- Socket原理与编程基础 Windows平台
- windows基础编程----第三篇(窗口的消息处理机制)
- Windows程序设计零基础自学_1_Windows程序消息循环机制
- windows基础应用程序编程(二):消息说明
- 一步步学破解-windows消息循环原理实例总结(二)