打开vs2015,新建一个空的win32项目,并向项目中添加一个main.cpp的c++源文件。main.c中的代码如下:
#include <Windows.h>
#include <stdio.h>
LRESULT CALLBACK WinProc(
HWND hwnd, //handle to window
UINT uMsg, //message identifier
WPARAM wParam, //first message parameter
LPARAM lParam //second message parameter
);
int WINAPI WinMain(
HINSTANCE hInstance, //handle to current instance
HINSTANCE hPrevInstance, //handle to previous instace
LPSTR lpCmdLine, //command line
int nCmdShow //show state
) {
//design a window class
WNDCLASS wndcls;
wndcls.cbClsExtra = 0;
wndcls.cbWndExtra = 0;
wndcls.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
wndcls.hCursor = LoadCursor(NULL, IDC_CROSS);
wndcls.hIcon = LoadIcon(NULL, IDI_ERROR);
wndcls.hInstance = hInstance; //application instance handle passed by WinMain function
wndcls.lpfnWndProc = WinProc;
wndcls.lpszClassName = L"tangliang";
wndcls.lpszMenuName = NULL;
wndcls.style = CS_HREDRAW | CS_VREDRAW;
RegisterClass(&wndcls);
//创建窗口,定义一个变量用来保存成功创建后返回的句柄
HWND hwnd;
hwnd = CreateWindow(L"tangliang", L"http://blog.csdn.net/a18779148177", WS_OVERLAPPEDWINDOW, 0, 0, 600, 400, NULL, NULL, hInstance, NULL);
//显示及刷新窗口
ShowWindow(hwnd, SW_SHOWNORMAL);
UpdateWindow(hwnd);
//定义消息结构体,开始消息循环
MSG msg;
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
//编写窗口过程函数
LRESULT CALLBACK WinProc(
HWND hwnd, //handle to window
UINT uMsg, //message identifier
WPARAM wParam, //first message parameter
LPARAM lParam //second message parameter
) {
switch (uMsg)
{
case WM_CHAR:
char szChar[20];
sprintf_s(szChar, "char code is %d", wParam);
MessageBox(hwnd, L"char code is %d", L"char", 0);
break;
case WM_LBUTTONDOWN:
MessageBox(hwnd, L"mouse clicked", L"message", 0);
HDC hdc;
hdc = GetDC(hwnd); //不能在响应WM_PAINT消息时调用
TextOut(hdc, 0, 50, L"tangliang", strlen("tangliang"));
//ReleaseDC(hwnd, hdc);
break;
case WM_PAINT:
HDC hDC;
PAINTSTRUCT ps;
hDC = BeginPaint(hwnd, &ps); //BeginPaint只能在响应WM_PAINT消息时调用
TextOut(hDC, 0, 0, L"http://blog.csdn.net/a18779148177", strlen("http://blog.csdn.net/a18779148177"));
EndPaint(hwnd, &ps);
break;
case WM_CLOSE:
if (IDYES == MessageBox(hwnd, L"是否真的结束?", L"message", MB_YESNO)) {
DestroyWindow(hwnd);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
return 0;
}
运行该项目,效果图如下:
在窗口中单击鼠标左键会弹出如下图所示对话框:
点击确定按钮后,如下图所示:
单击关闭按钮,如下图所示:
当拉伸窗口时,窗口会重新绘制