WIN32 基本应用框架
来源:互联网 发布:db2数据库的用户查看 编辑:程序博客网 时间:2024/05/01 15:23
WIN32基本框架如下:
1 设计窗口类
要创建一个窗口,当然要先设计该窗口的样式特征,例如当鼠标滑过该窗口时的光标类型,该窗口的背景颜色,窗口过程函数(用于消息处理)等等。
例如:
//设计窗口类
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = MainWndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = NULL;
wc.hCursor = LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = NULL;
wc.lpszClassName = TEXT("WndNotears");
2 注册窗口类
窗口类型设计好之后,就要向操作系统来注册该窗口类。
例如:
//注册窗口类
if(0 == RegisterClass(&wc))
return -1;
3 注册窗口类完成之后,就可以来创建这种类型的窗口了。
例如:
//创建窗口
hWnd = CreateWindowEx(WS_EX_NODRAG,TEXT("WndNotears"),TEXT("Window notears"),WS_VISIBLE | WS_CAPTION | WS_SYSMENU, CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);
4 可以检查一下是否成功创建了该窗口。
例如:
//检查窗口是否创建成功
if(!IsWindow(hWnd))
return -2;
5 创建窗口成功之后,接着显示窗口。
例如:
//显示窗口
ShowWindow(hWnd,nShowCmd);
6 最后一步更新窗口。
例如:
//更新窗口
UpdateWindow(hWnd);
以上的步骤就完成了一个窗口的创建,在WinMain函数中,接下来要做的事情就是完成消息循环的代码,以不断的处理消息队列中的消息,来让这个窗口“活”起来。
例如:
//消息循环
while(GetMessage(&msg,NULL,0,0))
{
//翻译消息
TranslateMessage(&msg);
//投递消息
DispatchMessage(&msg);
}
二 窗口过程函数
在窗口过程函数中,可以处理一些自己感兴趣的消息。一般在窗口过程函数中,会有一个switch语句。switch语句分析窗口过程接收到的消息,并分别进行处理。
例如:
LRESULT CALLBACK MainWndProc(HWND hWnd,UINT wMsg,WPARAM wParam,LPARAM lParam)
{
PAINTSTRUCT ps;
RECT rect;
HDC hdc;
switch(wMsg){
case WM_PAINT:
GetClientRect(hWnd,&rect);
hdc = BeginPaint(hWnd,&ps);
DrawText(hdc,TEXT("this is my first win32 program!"),-1,&rect,DT_CENTER | DT_VCENTER | DT_SINGLELINE);
EndPaint(hWnd,&ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return DefWindowProc(hWnd,wMsg,wParam,lParam);
}
三 一个完整的样例程序
#include <windows.h>
LRESULT CALLBACK MainWndProc (HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPWSTR lpCmdLine, int nCmdShow) {
WNDCLASS wc;
HWND hWnd;
MSG msg;
// Register application main window class.
wc.style = 0; // Window style
wc.lpfnWndProc = MainWndProc; // Callback function
wc.cbClsExtra = 0; // Extra class data
wc.cbWndExtra = 0; // Extra window data
wc.hInstance = hInstance; // Owner handle
wc.hIcon = NULL, // Application icon
wc.hCursor = LoadCursor (NULL, IDC_ARROW);// Default cursor
wc.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);
wc.lpszMenuName = NULL; // Menu name
wc.lpszClassName = TEXT("MyClass"); // Window class name
if (RegisterClass (&wc) == 0) return -1;
// Create main window.
hWnd = CreateWindowEx(WS_EX_NODRAG, // Ex style flags
TEXT("MyClass"), // Window class
TEXT("Hello"), // Window title
// Style flags
WS_VISIBLE | WS_CAPTION | WS_SYSMENU,
CW_USEDEFAULT, // x position
CW_USEDEFAULT, // y position
CW_USEDEFAULT, // Initial width
CW_USEDEFAULT, // Initial height
NULL, // Parent
NULL, // Menu, must be null
hInstance, // Application instance
NULL); // Pointer to create
// parameters
if (!IsWindow (hWnd)) return -2; // Fail code if not created.
// Standard show and update calls
ShowWindow (hWnd, nCmdShow);
UpdateWindow (hWnd);
// Application message loop
while (GetMessage (&msg, NULL, 0, 0)) {
TranslateMessage (&msg);
DispatchMessage (&msg);
}
// Instance cleanup
return msg.wParam;
}
//======================================================================
// MainWndProc - Callback function for application window
//
LRESULT CALLBACK MainWndProc (HWND hWnd, UINT wMsg, WPARAM wParam,
LPARAM lParam) {
PAINTSTRUCT ps;
RECT rect;
HDC hdc;
switch (wMsg) {
case WM_PAINT:
// Get the size of the client rectangle
GetClientRect (hWnd, &rect);
hdc = BeginPaint (hWnd, &ps);
DrawText (hdc, TEXT ("Hello Windows CE!"), -1, &rect,
DT_CENTER | DT_VCENTER | DT_SINGLELINE);
EndPaint (hWnd, &ps);
return 0;
case WM_DESTROY:
PostQuitMessage (0);
break;
}
return DefWindowProc (hWnd, wMsg, wParam, lParam);
}
- WIN32 基本应用框架
- win32基本框架
- Win32 Application基本框架
- WIN32基本窗体程序框架
- Win32应用程序基本框架详解
- win32 最基本编程和应用程序框架
- Win32 SDK编程基本框架代码
- Win32基本概念及程序基本框架
- win32 最基本编程和应用程序框架
- CoreImage框架基本应用
- 应用框架的基本思想
- 应用基本框架的搭建
- play框架的基本应用
- hello-win程序入门win32基本窗口框架全解析
- win32框架
- Win32++:可替代MFC的Windows桌面应用开发框架
- node.js web应用基本框架
- Kryo框架的获取、基本应用例子
- c++ 数据容器结构及比较
- 如何得到SQL Server的安装路径
- web架构设计经验分享
- 编译器
- ubuntu中安装man手册查看函数原型
- WIN32 基本应用框架
- 小写字母转变成大写字母 子程序
- 海量索引数据的机群分布
- struts2 验证学习
- Nutch开发中一些文章中不同的观点--搜索页面高亮关键字的修改
- Winform 打包
- 双网卡上内外网,都是DHCP配置。
- 计算字符串相似度
- snmp的VACM使用