【win32】编写程序窗口的步骤
- 格式:doc
- 大小:39.00 KB
- 文档页数:2
第一个窗口程序
环境:Visual C++6.0.
File—New—workspace
File—New—Project—Win32 Application—A Simple Application—finishe—OK
步骤:
1.定义WinMain函数:程序的入口
2.定义窗口过程函数:处理消息
1)窗口过程函数
2)缺省过程函数
3.注册窗口类:先注册才能创建
1)窗口类结构体:WNDCLASSEX wcex;
2)注册窗口类RegisterClass(&exec);
4.创建窗口:在内存中创建窗口对象,并不可见。
CreateWindow,返回值为步骤5所用
5.显示窗口:在屏幕上显示窗口
1)显示:ShowWindow(步骤4的句柄,显示方式)
2)刷新: UpdateWindow(步骤4的句柄)
6.消息循环:重复执行提取消息、翻译消息、派发消息,处理消息
1)从窗口的消息队列中提取一条消息GetMessage
2)将虚键消息翻译为字符消息TranslateMessage
3)将消息派发到窗口过程函数DispatchMessage
4)在窗口过程函数中处理消息,即执行步骤2
程序:
#include "stdafx.h"
LPCTSTR g_pszAppName = "WinHello"; //应用程序名,用于标题栏(全局)
LPCTSTR g_pszMainWndClass = "MAIN"; //主窗口类名,窗口的标识(全局)HINSTANCE g_hInstance = NULL; //应用程序的实例句柄(全局)
//主窗口过程函数,
LRESULT CALLBACK MainWndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam){
switch(uMsg){
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
//注册窗口类typedef unsigned short WORD; typedef WORD ATOM;
ATOM InitApplication(HINSTANCE hInstance){
WNDCLASSEX wcex = {0}; //定义窗口类,以下设置窗口类成员属性,可查WNDCLASSEX wcex.cbSize = sizeof(wcex); //结构体的大小,在调用GetClassInfoEx函数确保已设置。
wcex.style = CS_HREDRAW | CS_VREDRAW; //窗口风格
wcex.lpfnWndProc = MainWndProc;//窗口过程函数
wcex.cbClsExtra = 0;//窗口类附加数据缓冲区字节数wcex.cbWndExtra = 0; //窗口附加数据缓冲区字节数
wcex.hInstance = hInstance;//窗口实例句柄
wcex.hIcon = LoadIcon(NULL,IDI_APPLICATION);//大图标
wcex.hIconSm = LoadIcon(NULL,IDI_APPLICATION);//小图标
wcex.hCursor = LoadCursor(NULL,IDC_ARROW); //光标
wcex.hbrBackground = GetSysColorBrush(COLOR_WINDOW);//背景
wcex.lpszMenuName = NULL;//菜单项,MAKEINTRESOURCE(IDR_MENU1) wcex.lpszClassName = g_pszMainWndClass;//窗口类名
return RegisterClassEx(&wcex);//注册窗口类,直接为CreateWindowEx调用函数所使用. }
//创建并显示窗口
BOOL InitInstance(HINSTANCE hInstance,int nCmdShow){
g_hInstance = hInstance;
HWND hwndMain = CreateWindowEx(//返回创建窗口句柄
WS_EX_CLIENTEDGE,//Extended Window Styles,本例为3D效果窗口
g_pszMainWndClass,//注册的类名
g_pszAppName,//窗体名,标题栏显示名称
WS_OVERLAPPEDWINDOW,//窗口风格
CW_USEDEFAULT,//窗体水平位置
CW_USEDEFAULT,//窗体垂直位置
CW_USEDEFAULT,//窗体宽度
CW_USEDEFAULT,//窗体高度
NULL,//窗体句柄
NULL,//菜单句柄
hInstance,//实例窗体句柄
NULL);//创建窗体的数据
if(!hwndMain)
return FALSE;
ShowWindow(hwndMain,nCmdShow); //显示窗口
UpdateWindow(hwndMain);//更新窗口
return TRUE;
}
/*程序的入口
int APIENTRY WinMain(HINSTANCE hInstance,// handle to current instance
HINSTANCE hPrevInstance,// handle to previous instance
LPSTR lpCmdLine,// command line,命令行参数字符串
int nCmdShow)// show state,窗口显示方式,最大、最小化等{
if(!hPrevInstance) //16位版本的兼容,可以不要
if(!InitApplication(hInstance))//注册窗口类
return 0;
if (!InitInstance(hInstance,nCmdShow)) //创建并显示窗口,参为窗体实例句柄和窗口显示方式return 0;
//消息循环
MSG msg = {0};//窗口句柄,消息id,wParam,lParam,产生时间,产生时鼠标位置while(GetMessage(&msg,NULL,0,0)){ //提取消息
TranslateMessage(&msg);//翻译消息
DispatchMessage(&msg);//派发消息,调用主窗口过程函数}
return msg.wParam;
}