创建一个windows应用程序需要以下几步:
WinMain函数的定义;
创建一个窗口;
进行消息循环;
编写窗口过程函数.
#include <Windows.h>
LPCWSTR w_name;//窗口类的名字
HINSTANCE w_instance;//应用程序的实例句柄
HWND w_hwnd;//窗口句柄
bool Init();//初始化函数
void Run();//消息处理函数
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(
HINSTANCE hInstance,//当前运行的实例句柄
HINSTANCE hPrevInstance,//当前运行的实例句柄的前一个句柄
LPSTR lpCmdLine,//一个以空终止的字符串,指定传递给应用程序的命令行参数。
int nCmdshow//指定程序的窗口应该如何显示
)
{
if(Init())Run();
return 0;
}
bool Init()
{
w_instance = GetModuleHandle(NULL);//得到程序实例句柄
w_name = L"Hello world";
WNDCLASSEX wnd;//定义一个窗口类
wnd.cbSize = sizeof(WNDCLASSEX);//窗口大小
wnd.cbClsExtra = 0;//附加字节,一般为0
wnd.cbWndExtra = 0;//附加字节,一般为0
wnd.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);//窗口画刷颜色
wnd.hCursor = LoadCursor(NULL,IDC_ARROW);//窗口中光标的风格
wnd.hIcon = LoadIcon(NULL,IDI_WINLOGO);//窗口图标,可以在资源视图中改
wnd.hIconSm = wnd.hIcon;//窗口小图标
wnd.hInstance = w_instance;//实例句柄
wnd.lpfnWndProc = WndProc;//窗口过程函数,下面有定义
wnd.lpszClassName = w_name;//窗口类名称
wnd.lpszMenuName = w_name;//菜单资源名称,可以在资源视图中改
wnd.style = CS_HREDRAW | CS_VREDRAW;//窗口风格,用|符号能够同时选中,具体类型看下面的图
//注册窗口类
if(!RegisterClassEx(&wnd))
{
MessageBox(NULL,L"注册窗口失败!",L"Hello world",0);
return 0;
}
//创建窗口
w_hwnd = CreateWindowEx(WS_EX_APPWINDOW,w_name,w_name,WS_OVERLAPPEDWINDOW,300,200,
800,600,NULL,NULL,w_instance,NULL);
//显示窗口创建为焦点
ShowWindow(w_hwnd,SW_SHOW);
SetForegroundWindow(w_hwnd);
SetFocus(w_hwnd);
//隐藏鼠标
SetCursor(false);
return true;
}
//相应调度window消息及调用渲染函数
void Run()
{
MSG msg;
//初始化消息函数
ZeroMemory(&msg,sizeof(MSG));
while(msg.message != WM_QUIT)
{
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE)){
TranslateMessage(&msg);//翻译消息
DispatchMessage(&msg);//发送消息给窗口过程
}
else {
//Do someting
}
}
}
LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
switch(msg)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
break;
}
return DefWindowProc(hwnd,msg,wParam,lParam);
}
窗口风格: