gpt4 book ai didi

user-interface - Win32 GUI 在调整大小时闪烁

转载 作者:行者123 更新时间:2023-12-04 18:16:48 27 4
gpt4 key购买 nike

我有一个带有选项卡控件的 Win32 GUI 程序,每个选项卡都有一个 ListView 控件。每当调整窗口大小时,都会出现大量闪烁。我尝试了以下事情:

  • 在主 wndproc 中处理 WM_ERASEBKGND 并返回 TRUE。没有效果。
  • 过滤掉事件循环中的所有 WM_ERASEBKGND 消息。没有效果。
  • 在主窗口上设置 WM_CLIPCHILDREN 样式。现在,当窗口调整大小时, ListView 控件会被简单地删除为白色背景并且不会重绘。
  • 使用 DefWindowPos 而不是 MoveWindow。没有效果。
  • 在 MoveWindow 中为 bRepaint 传递 FALSE。与设置 WS_CLIPCHILDREN 的效果相同(见上文)。

  • 这是 RegisterClassEx 代码:
    memset(&wcex, 0, sizeof(WNDCLASSEX));
    wcex.cbSize = sizeof(WNDCLASSEX);
    wcex.style = 0;
    wcex.lpfnWndProc = PhMainWndProc;
    wcex.cbClsExtra = 0;
    wcex.cbWndExtra = 0;
    wcex.hInstance = PhInstanceHandle;
    wcex.hIcon = LoadIcon(PhInstanceHandle, MAKEINTRESOURCE(IDI_PROCESSHACKER));
    wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
    //wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
    wcex.lpszMenuName = MAKEINTRESOURCE(IDR_MAINWND);
    wcex.lpszClassName = PhWindowClassName;
    wcex.hIconSm = (HICON)LoadImage(PhInstanceHandle, MAKEINTRESOURCE(IDI_PROCESSHACKER), IMAGE_ICON, 16, 16, 0);

    WM_SIZE 处理程序:
    RECT rect;

    // Resize the tab control.

    GetClientRect(PhMainWndHandle, &rect);
    MoveWindow(TabControlHandle, rect.left, rect.top,
    rect.right - rect.left, rect.bottom - rect.top, TRUE);

    // Resize the list view.

    TabCtrl_AdjustRect(TabControlHandle, FALSE, &rect);

    MoveWindow(ListViewHandle, rect.left, rect.top,
    rect.right - rect.left, rect.bottom - rect.top, TRUE);

    样式如下:
  • 主窗口:WS_OVERLAPPEDWINDOW
  • 选项卡控件:WS_CHILD (和 WS_VISIBLE )
  • ListView 控件:WS_CHILD | WS_BORDER | LVS_REPORT (和 WS_VISIBLE )
  • 最佳答案

    事实证明 Z 排序存在问题 - 在 ListView 上调用 BringWindowToTop 解决了这个问题。

    关于user-interface - Win32 GUI 在调整大小时闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2036599/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com