学习总结:
01,老师视频中的代码我复制了下来,有一个直观的认识,有一个直观的感受。
02,但是对于消息的传递,感觉还是有点晕忽忽的。
============================
image.png
image.png
image.png
image.png
image.png
image.png
image.png
运行结果图片:
image.png
源代码:
#include <tchar.h>
#include <windows.h>
#include <CommCtrl.h>
static TCHAR szWindowClass[] = _T("WindowCLass");
static TCHAR szTitle[] = _T("我在VC驿站的第一个窗口程序");
//第五步,窗口函数中处理窗口消息
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;
TCHAR greeting[] = _T("VC驿站的各位网友们,大家好哦!");
UINT IDC_BUTTON_1 = 200; //控件id,定义了一个
UINT IDC_BUTTON_2 = 201; //控件id,定义了一个
switch (message)
{
//这是我新增的东西,第二个时间创建控件
case WM_CREATE: //当主窗口创建完事之后,在执行这里,这里执行完毕之后,才往下走。21:53s视频中有效关系解释。
{
HWND hButtonWnd1 = CreateWindow(WC_BUTTON, _T("我是按钮1"), WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON, 100, 100, 100, 100, hWnd, (HMENU)IDC_BUTTON_1, NULL, NULL);
HWND hButtonWnd2 = CreateWindow(WC_BUTTON, _T("我是按钮2"), WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON, 200, 200, 100, 100, hWnd, (HMENU)IDC_BUTTON_2, NULL, NULL);
}
break;
case WM_COMMAND: //按钮消息
{
UINT nCtrID = LOWORD(wParam); //控件id知道了
UINT nCode = HIWORD(wParam); //BN_CLICKED
if (nCode == BN_CLICKED)
{
if (nCtrID == IDC_BUTTON_1)
{
MessageBox(hWnd, _T("按钮1被点击了!"), _T("tip"), MB_OK);
}
else if (nCtrID == IDC_BUTTON_2)
{
MessageBox(hWnd, _T("按钮2被点击了!"), _T("tip"), MB_OK);
}
}
}
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: 在此添加任意绘图代码...
TextOut(hdc, 5, 5, greeting, _tcslen(greeting));
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
break;
}
return 0;
}
int WINAPI _tWinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPTSTR lpCmdLine,
_In_ int nCmdShow)
{
//第一步,注册窗口类,指定窗口类的名称与窗口回调函数
WNDCLASSEX wcex = { 0 };
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.lpfnWndProc = WndProc;
wcex.lpszClassName = szWindowClass;
if (!RegisterClassEx(&wcex))
{
MessageBox(NULL, _T("注册窗口类失败"), _T("tip"), NULL);
return 1;
}
//第二步,创建窗口,指定注册窗口类,窗口标题和窗口的大小
HWND hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 500, 300, NULL, NULL, hInstance, NULL);
//---------时机1,这里创建子窗口或者控件
if (!hWnd)
{
MessageBox(NULL, _T("创建窗口失败"), _T("tip"), NULL);
return 1;
}
//第三步,显示窗口
ShowWindow(hWnd, nCmdShow);
//第四步,开始消息循环
MSG msg = { 0 };
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int)msg.wParam;
}
网友评论