win32编程day03 学习笔记
2012-08-11 19:33
387 查看
一 窗口注册和创建
1 Win32窗口程序创建步骤
1.1 WinMain入口函数的定义
1.2 WindowProc函数的定义
1.3 注册窗口类
RegisterClass/RegisterClassEx
1.4 创建窗口
CreateWindow/CreateWindowEx
1.5 窗口的显示和刷新
ShowWindow/UpdateWindow
1.6 消息处理
GetMessage/DispatchMessage
1.7 窗口退出
WM_DESTROY/PostQuitMessage
2 窗口的注册
2.1 窗口类的分类
2.1.1 系统全局的窗口类.比如按钮("BUTTON")、文本编辑框("EDIT")等。
2.1.2 应用程序的全局窗口类。可以在一个应用程序中EXE、DLL等所有模块中使用的窗口类。
2.1.3 局部窗口类。只能在本模块中使用的窗口类。
2.2 实现窗口类的注册
2.2.1 系统全局的窗口类,无需注册直接使用。使用CreateWindow函数,在CLASSNAME中指定系统已经定义好的窗口类型名称即可。
View Code
1 Win32窗口程序创建步骤
1.1 WinMain入口函数的定义
1.2 WindowProc函数的定义
1.3 注册窗口类
RegisterClass/RegisterClassEx
1.4 创建窗口
CreateWindow/CreateWindowEx
1.5 窗口的显示和刷新
ShowWindow/UpdateWindow
1.6 消息处理
GetMessage/DispatchMessage
1.7 窗口退出
WM_DESTROY/PostQuitMessage
2 窗口的注册
2.1 窗口类的分类
2.1.1 系统全局的窗口类.比如按钮("BUTTON")、文本编辑框("EDIT")等。
2.1.2 应用程序的全局窗口类。可以在一个应用程序中EXE、DLL等所有模块中使用的窗口类。
2.1.3 局部窗口类。只能在本模块中使用的窗口类。
2.2 实现窗口类的注册
2.2.1 系统全局的窗口类,无需注册直接使用。使用CreateWindow函数,在CLASSNAME中指定系统已经定义好的窗口类型名称即可。
View Code
// WinCreate.cpp : Defines the entry point for the application. // #include "stdafx.h" HINSTANCE g_hInst = NULL; // 父窗口的处理函数 LRESULT CALLBACK WndProc( HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam ) { switch( nMsg ) { case WM_DESTROY: PostQuitMessage( 0 ); return 0; } return DefWindowProc( hWnd, nMsg, wParam, lParam ); } //子窗口的处理函数 LRESULT CALLBACK ChildProc( HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam ) { return DefWindowProc( hWnd, nMsg, wParam, lParam ); } //消息处理函数 void Message( ) { MSG msg = { 0 }; while( GetMessage( &msg, NULL, 0, 0 ) ) { DispatchMessage( &msg ); } } //显示窗口 void DisplayWnd( HWND hWnd ) { ShowWindow( hWnd, SW_SHOW ); UpdateWindow( hWnd ); } //创建窗口 HWND CreateWnd( LPSTR pszClassName, DWORD nStyle, HWND hParent ) { HWND hWnd = CreateWindowEx( 0, pszClassName, "MyWnd", nStyle, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hParent,NULL,g_hInst,NULL ); return hWnd; } //注册窗口 BOOL RegisterWnd( LPSTR pszClassName, WNDPROC proc, int nBrush ) { WNDCLASSEX wce = { 0 }; wce.cbSize = sizeof( wce ); wce.style = CS_HREDRAW|CS_VREDRAW; wce.cbClsExtra = 0; wce.cbWndExtra = 0; wce.lpfnWndProc = proc; wce.hIcon = NULL; wce.hCursor = NULL; wce.hbrBackground = HBRUSH( nBrush ); wce.hInstance = g_hInst; wce.lpszClassName = pszClassName; wce.lpszMenuName = NULL; wce.hIconSm = NULL; ATOM nAtom = RegisterClassEx( &wce ); if( 0 == nAtom ) { return FALSE; } return TRUE; } int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { g_hInst = hInstance; //注册父窗口类 RegisterWnd( "MyWnd", WndProc, COLOR_BTNFACE+1 ); //注册子窗口类 RegisterWnd( "Child", ChildProc, COLOR_WINDOW ); //创建父窗口 HWND hWnd = CreateWnd( "MyWnd", WS_OVERLAPPEDWINDOW, NULL ); //创建子窗口 HWND hChild1 = CreateWnd( "Child", WS_CHILD|WS_VISIBLE|WS_BORDER| WS_THICKFRAME|WS_CAPTION|WS_SYSMENU| WS_MINIMIZEBOX|WS_MAXIMIZEBOX, hWnd ); HWND hChild2 = CreateWnd( "Child", WS_POPUP|WS_VISIBLE| WS_THICKFRAME|WS_CAPTION|WS_SYSMENU, hWnd ); HWND hChild3 = CreateWnd( "Child", WS_CHILD|WS_VISIBLE|WS_BORDER, hWnd ); //移动窗口位置 MoveWindow( hChild1, 100, 100, 200, 200, TRUE ); MoveWindow( hChild2, 100, 200, 200, 200, TRUE ); MoveWindow( hChild3, 100, 300, 200, 200, TRUE ); //显示父窗口 DisplayWnd( hWnd ); Message( ); return 0; }
相关文章推荐
- Win32编程day15 学习笔记
- Win32编程day07 学习笔记
- Win32编程day02 学习笔记
- Win32编程day04 学习笔记
- Win32编程day13 学习笔记
- Win32编程day05 学习笔记
- Win32编程day01 学习笔记
- Win32编程day10 学习笔记
- linux 系统编程-学习笔记9--线程的同步互斥锁、读写锁/select/poll
- mysql 学习笔记 day03
- 嵌入式linux学习笔记之网络编程
- 图像处理 基于Visual C++编程 学习笔记 (2)显示bmp图像
- Java编程思想学习笔记
- TCP/IP网络编程 学习笔记_8 --优雅地断开套接字连接
- 图像处理 基于Visual C++编程 学习笔记 (3)显示灰度图像和二值化图像
- 无法编译出.sys文件 寒江孤钓<<windows 内核安全编程>> 学习笔记
- 韩顺平 javascript教学视频_学习笔记29_dom编程加强_dom对象(document2) 加强重要
- 【Python学习笔记】函数式编程:装饰器
- 【Python】学习笔记——-5.0、函数式编程
- 网络编程IO模型--学习笔记