张葵花 2023-08-01 12:41 采纳率: 0%
浏览 7

WIN32绘制的创建口有残影

我的WIN32窗口写出来子窗口后拖动有残影是怎么回事?不知道是绘制窗口的问题,还是注册窗口的问题。求解答

img


#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;


    
}
  • 写回答

2条回答 默认 最新

  • threenewbee 2023-08-01 13:08
    关注

    wcMain.lpfnWndProc = DefWindowProc;
    这个要指向一个你自己写的回调函数,在wm_paint里去刷新客户区

    评论

报告相同问题?

问题事件

  • 创建了问题 8月1日

悬赏问题

  • ¥15 需要手写数字信号处理Dsp三个简单题 不用太复杂
  • ¥15 数字信号处理考试111
  • ¥100 关于#audobe audition#的问题,如何解决?
  • ¥15 allegro17.2生成bom表是空白的
  • ¥15 请问一下怎么打通CAN通讯
  • ¥20 如何在 rocky9.4 部署 CDH6.3.2?
  • ¥35 navicat将excel中的数据导入mysql出错
  • ¥15 rt-thread线程切换的问题
  • ¥15 高通uboot 打印ubi init err 22
  • ¥15 R语言中lasso回归报错