1.MFC发展
mfc的底层是由windows api创建的,我们写mfc时不需要写底层代码,但是我们应该理解底层,底层懂了上面的东西就会使用起来更简单
2.windows api创建窗口
创建一个窗口我总结为6步:
- 设计窗口
- 注册窗口
- 创建窗口
- 显示和更新
- 通过循环取消息
- 处理消息(窗口过程)
以下是创建窗口代码
#include<windows.h> //底层实现窗口的头文件
//6.处理窗口过程
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_CLOSE:
DestroyWindow(hwnd); //发送另一个消息WM_DESTROY
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_LBUTTONDOWN: //鼠标信息
{
int xPos = LOWORD(lParam);
int yPos = HIWORD(lParam);
char buf[1024];
wsprintf(buf, TEXT("x = %d, y = %d"), xPos, yPos);
MessageBox(hwnd, buf, TEXT("鼠标左键按下"), MB_OK);
break;
}
case WM_KEYDOWN: //键盘信息
MessageBox(hwnd, TEXT("键盘按下"), TEXT("键盘按下"), MB_OK);
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
TextOut(hdc, 100, 100, TEXT("HELLO"), strlen("HELLO"));
EndPaint(hwnd, &ps);
break;
}
}
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
//win32桌面程序里的入口函数
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
//1设计窗口
//2.注册窗口
//3.创建窗口
//4.显示和更新
//5.通过循环取消息
//6.处理消息(窗口过程)
//1.设计窗口
WNDCLASS wc;
wc.cbClsExtra = 0; //类的额外的内存
wc.cbWndExtra = 0; //窗口的额外的内存
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); //设置背景
wc.hCursor = LoadCursor(NULL, IDC_HAND); //设置光标
wc.hIcon = LoadIcon(NULL, IDI_ERROR); //图标
wc.hInstance = hInstance;
wc.lpfnWndProc = WindowProc;
wc.lpszClassName = TEXT("WIN");
wc.lpszMenuName = NULL;
wc.style = 0;
//2.注册窗口
RegisterClass(&wc);
//3.创建窗口
HWND hwnd = CreateWindow(wc.lpszClassName, TEXT("WINDOWS"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
//4.显示和更新
ShowWindow(hwnd, SW_SHOWNORMAL);
UpdateWindow(hwnd);
//5.通过循环取消息
/*
HWND hwnd; 主窗口句柄
UINT message; 具体消息名称
WPARAM wParam; 键盘消息
LPARAM lParam; 鼠标消息
DWORD time; 消息产生时间
POINT pt; 鼠标点击的坐标信息
*/
MSG msg;
while (1)
{
if (GetMessage(&msg, NULL, 0, 0) == FALSE)
{
break;
}
//翻译消息
TranslateMessage(&msg);
//分发消息
DispatchMessage(&msg);
}
return 0;
}