// #define WINAPI __stdcall //调用约定
// #define CALLBACK __stdcall //调用约定
int WINAPI WinMain(
HINSTANCE hInstance, // handle to current instance 实例句柄
HINSTANCE hPrevInstance, // handle to previous instance 父实例句柄
LPSTR lpCmdLine, // command line 命令行
int nCmdShow // show state 显示方式
);
//函数回调函数,用于处理特定的消息
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
return DefWindowProc(hWnd, message, wParam, lParam);//交给系统进行处理
}
//创建窗口
hWnd = CreateWindow(szWindowClass, //窗口类名称
szTitle, //窗口标题
WS_OVERLAPPEDWINDOW, //窗口风格
CW_USEDEFAULT, //初始x坐标
0, //初始y坐标
CW_USEDEFAULT, //初始宽度
0, //初始高度
NULL, //父窗口句柄
NULL, //菜单句柄
hInstance, //程序实例句柄
NULL); //创建参数
1,窗口依据"窗口类"来创建的。
2,窗口类属性里面有用于处理传递给窗口的消息的窗口过程参数。
3,窗口类的使用允许多个窗口共享同一窗口类,因而多个窗口可以使用相同的窗口过程。
#include <windows.h>
#include <stdio.h>
LRESULT CALLBACK WinProc(
HWND hWnd, // handle to window
UINT Msg, // message
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);
int WINAPI WinMain(
HINSTANCE hInstance, // handle to current instance
HINSTANCE hPrevInstance, // handle to previous instance
LPSTR lpCmdLine, // command line
int nCmdShow // show state
)
{
//1.设计一个窗口类
WNDCLASS wndcls;
wndcls.cbClsExtra = 0;
wndcls.cbWndExtra = 0;
wndcls.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wndcls.hCursor = LoadCursor(NULL, IDC_CROSS);
wndcls.hIcon = LoadIcon(NULL, IDI_ERROR);
wndcls.hInstance = hInstance; //程序实例句柄
wndcls.lpfnWndProc = WinProc; //回调函数
wndcls.lpszClassName = "SDK2015";
wndcls.lpszMenuName = NULL;
wndcls.style = CS_HREDRAW | CS_VREDRAW;
//2.注册一个窗口类
RegisterClass(&wndcls);
//3.创建窗口
HWND hwnd;
hwnd = CreateWindow(szWindowClass, //窗口类名称
szTitle, //窗口标题
WS_OVERLAPPEDWINDOW, //窗口风格
CW_USEDEFAULT, //初始x坐标
0, //初始y坐标
CW_USEDEFAULT, //初始宽度
0, //初始高度
NULL, //父窗口句柄
NULL, //菜单句柄
hInstance, //程序实例句柄
NULL); //创建参数
//4.显示及刷新窗口
ShowWindow(hwnd, SW_SHOW);
UpdateWindow(hwnd);
//5.消息循环,接收窗口消息
MSG msg;
BOOL bRet;
while((bRet = GetMessage(&msg, NULL, 0, 0)) != 0)
{
if (bRet == -1)
{
return -1;
}else
{
TranslateMessage(&msg); //转换按键字符,并发送WM_CHAR消息
DispatchMessage(&msg); //把消息交给Windows,由Windows发送给合适的窗口过程来处理
}
}
return msg.wParam;
}
LRESULT CALLBACK WinProc(
HWND hWnd, // handle to window
UINT uMsg, // message
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
)
{
switch(uMsg)
{
case WM_CLOSE:
if(IDYES == MessageBox(hWnd, "是否真的结束?", "Message", MB_YESNO))
DestroyWindow(hWnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
break;
}
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}