【win32】编写程序窗口的步骤

  • 格式:doc
  • 大小:39.00 KB
  • 文档页数:2

下载文档原格式

  / 7
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第一个窗口程序

环境: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;

}

相关主题