#include <windows.h>
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;//窗口函数声明
//WinMain函数是所有Windows应用程序的入口,类似c语言中的main函数其功能是完成一系列的定义和初始化,并产生消息循环。
int APIENTRY WinMain(HINSTANCE hInstance, //应用程序当前实例句柄
HINSTANCE hPrevInstance, //应用程序其他实例句柄
LPSTR lpCmdLine, //指向函数命令行参数的指针
int nCmdShow //应用程序开始执行时窗口显示方式的整数值标志
)
{
//初始化,初始化包括窗口类的定义、注册、创建窗口实例和显示窗口四部分
HWND hwnd; //定义窗口类结构句柄
MSG Msg; //定义消息结构变量
WNDCLASS wndclass;//定义窗口类结构变量
//定义窗口类的各种属性
wndclass.style =CS_HREDRAW|CS_VREDRAW; //改变窗口大小则重画
wndclass.lpfnWndProc=WndProc; //定义窗口处理函数
wndclass.cbClsExtra=0; //窗口类无扩展
wndclass.cbWndExtra=0; //窗口实例无扩展
wndclass.hInstance=hInstance; //注册窗口类实例句柄
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION); //窗口的最小化图标为缺省图标
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW); // 窗口采用箭头光标
wndclass.hbrBackground=(HBRUSH)(GetStockObject(WHITE_BRUSH)); //窗口背景为白色
wndclass.lpszMenuName=NULL; //窗口无菜单
wndclass.lpszClassName="windows窗口创建"; //窗口类名
//以下是窗口类的注册-----------Windows系统本身提供部分预定义的窗口类,程序员也可以自定义窗口类,窗口类必须先注册后使用。
if(!RegisterClass(&wndclass)) //如果注册失败 发出警告
return false;
//创建窗口
hwnd=CreateWindow( "windows窗口创建", //窗口类名,创建窗口时一定要基于我们已经注册过的窗口类名,即"窗口"。
"windows窗口创建", //窗口标题名
WS_OVERLAPPEDWINDOW, //窗口的风格 重叠式窗口
CW_USEDEFAULT,CW_USEDEFAULT, //窗口左上角坐标默认值
CW_USEDEFAULT,CW_USEDEFAULT, //窗口的高和宽为缺省值
NULL, //此窗口无父窗口
NULL, //此窗口无子菜单
hInstance, //创建此窗口的应用程序的当前句柄
NULL //不使用该值,此窗口无创建参数
);
//显示窗口
ShowWindow(hwnd,nCmdShow);
//更新和绘制窗口用户区
UpdateWindow(hwnd);
//消息循环
while(GetMessage(&Msg,NULL,0,0)) //GetMessage()函数是从调用线程的消息队列中取出一条消息;对于每一个应用程序窗口线程,操作系统都会为其建立一个消息队列,当我们的窗口有消息时(即所有与这个窗口线程相关的消息),操纵系统会把这个消息放到该线程的消息队列当中,我们的窗口程序就通过这个GetMessage()函数从自己的消息队列中取出一条一条具体的消息并进行响应操作。
{
TranslateMessage(&Msg);//对"消息对"的转化,如对键盘的WM_KEYDOWN和WM_KEYUP消息对转化为WM_CHAR消息,并且将转换后的新消息投递到我们的消息队列中去,这个转化操作不会影响原来的消息,只会产生一个新的消息。
DispatchMessage(&Msg);//DispatchMessage()函数是将我们取出的消息传到窗口的回调函数去处理;可以理解为该函数将取出的消息路由给操作系统,然后操作系统去调用我们的窗口回调函数对这个消息进行处理。
}
return Msg.wParam; //消息循环结束 即程序结束时 将信息返回系统
}
//窗口函数
LRESULT CALLBACK WndProc(HWND hwnd,UINT message, WPARAM wParam,LPARAM lParam)
{
//根据消息队列值转相应的消息处理
switch(message)
{
case WM_PAINT:
HDC hdc;
PAINTSTRUCT ps;
hdc=BeginPaint(hwnd,&ps);
TextOut(hdc,10,20,"哈哈,Windows编程创建的窗口!",28);
EndPaint(hwnd,&ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd,message,wParam,lParam);
}
windows SDK程序的模板
最新推荐文章于 2023-11-06 21:12:08 发布