我的WIN32窗口写出来子窗口后拖动有残影是怎么回事?不知道是绘制窗口的问题,还是注册窗口的问题。求解答
#include <Windows.h>
int WINAPI WinMain(
//入口函数
HINSTANCE hInsteance, //句柄
HINSTANCE hPrevInsteance,//不用管
LPSTR lpCmdLine,//包含命令行参数的字符串指针。
int nCmdShow //指定应用程序窗口的初始显示状态。
)
{
//显示窗口时需 先注册一个窗口的类(父窗口)
WNDCLASSEX wcMain = {0};
wcMain.cbSize = sizeof(wcMain);// 结构体的大小
wcMain.style = CS_OWNDC; // 窗口类的样式
wcMain.lpfnWndProc = DefWindowProc; //默认 窗口过程函数
wcMain.cbClsExtra = 0;// 窗口类扩展的额外字节数
wcMain.cbWndExtra = 0;// 窗口实例扩展的额外字节数
wcMain.hInstance = hInsteance; // 当前应用程序实例的句柄
wcMain.hIcon = nullptr;// 窗口的图标句柄(空指针)
wcMain.hCursor = nullptr;// 窗口的光标句柄
wcMain.hbrBackground = nullptr;// 窗口的背景句柄
wcMain.lpszMenuName = nullptr;// 窗口的菜单资源名
wcMain.lpszClassName = L"Father";// 窗口类的名称
wcMain.hIconSm = nullptr;// 窗口的小图标句柄
RegisterClassEx(&wcMain); //是一个函数调用,用于将窗口类结构体 wcMain 注册到操作系统中
//显示窗口时需 先注册一个窗口的类(子窗口)
WNDCLASSEX wcSon = { 0 };
wcSon.cbSize = sizeof(wcMain);// 结构体的大小
wcSon.style = CS_OWNDC; // 窗口类的样式
wcSon.lpfnWndProc = DefWindowProc; //默认 窗口过程函数
wcSon.cbClsExtra = 0;// 窗口类扩展的额外字节数
wcSon.cbWndExtra = 0;// 窗口实例扩展的额外字节数
wcSon.hInstance = hInsteance; // 当前应用程序实例的句柄
wcSon.hIcon = nullptr;// 窗口的图标句柄(空指针)
wcSon.hCursor = nullptr;// 窗口的光标句柄
wcSon.hbrBackground = nullptr;// 窗口的背景句柄
wcSon.lpszMenuName = nullptr;// 窗口的菜单资源名
wcSon.lpszClassName = L"Son";// 窗口类的名称
wcSon.hIconSm = nullptr;// 窗口的小图标句柄
RegisterClassEx(&wcSon); //是一个函数调用,用于将窗口类结构体 wcMain 注册到操作系统中
//2.然后创造实例(父窗口)
HWND hWnd_wcMain = CreateWindowExW(
0,// 扩展窗口样式
L"Father",// 窗口类名
L"Father",// 窗口标题
WS_CAPTION | WS_MINIMIZEBOX | WS_SYSMENU, // 窗口样式(包括标题栏、最小化按钮、系统菜单)
100, 100,// 窗口角坐标
800, 600, //宽度和高度
nullptr,// 父窗口句柄
nullptr, // 菜单句柄
hInsteance, // 当前应用程序实例句柄
nullptr// 传递给窗口的额外数据指针
);
//2.然后创造实例(子窗口)
HWND hWnd_wcSon = CreateWindowExW(
0,// 扩展窗口样式
L"Son",// 窗口类名
L"Son",// 窗口标题
WS_CHILD | WS_VISIBLE | WS_OVERLAPPEDWINDOW, //!!!!!使用 WS_CHILD 样式将窗口创建为子窗口,并使用 WS_VISIBLE 样式使其可见!!!!!子窗口特殊
50, 50,// 窗口角坐标
300, 200, //宽度和高度
hWnd_wcMain,// !!!!!父窗口句柄!!!!!子窗口特殊
nullptr, // 菜单句柄
hInsteance, // 当前应用程序实例句柄
nullptr// 传递给窗口的额外数据指针
);
//展示窗口
ShowWindow(hWnd_wcMain, SW_SHOW);
UpdateWindow(hWnd_wcMain);
// 处理窗口消息循环
MSG msg;
while (GetMessageW(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessageW(&msg);
}
return 0;
}
wcMain.lpfnWndProc = DefWindowProc;
这个要指向一个你自己写的回调函数,在wm_paint里去刷新客户区