【问题标题】:Win32 API - Using TextOut to draw over a blank area of a tool barWin32 API - 使用 TextOut 在工具栏的空白区域上绘图
【发布时间】:2021-11-26 03:41:36
【问题描述】:

我在工具栏中嵌入了几个子窗口控件。我正在尝试使用 TextOut 在两个子窗口的正上方添加一个标签,以便用户知道这些控件的作用。但是,文本永远不会显示。工具栏似乎被绘制在它上面,覆盖了它。我的问题是,如何让文本出现在工具栏的顶部?而不是被它覆盖?这是我正在使用的代码 sn-p。抱歉,如果代码草率。我还在学习!如果您需要更多代码,请告诉我,我将提供完整的代码。

感谢您的意见,大卫 B。

case WM_CREATE:
    LoadLibrary(TEXT ("Msftedit.dll"));

    //Create Child Windows

    RichEdit = CreateWindow(MSFTEDIT_CLASS, TEXT("EDITOR"), WS_CHILD | ES_MULTILINE | WS_VISIBLE | WS_BORDER,
        0, 0, 0, 0, hwnd, RichEditorID, GetModuleHandle(NULL), NULL);
    
    Toolbar = CreateWindow(TOOLBARCLASSNAME, NULL, WS_CHILD | TBSTYLE_FLAT, 0, 0, 0, 0, hwnd,
        ToolBarID, GetModuleHandle(NULL), NULL);
    
    ListboxType = CreateWindow(WC_LISTBOX, NULL, WS_CHILD| WS_VISIBLE, 0, 0, 0, 0, Toolbar, ChildID1 + 2,
        GetModuleHandle(NULL), NULL);
    
    ListboxArch = CreateWindow(WC_LISTBOX, NULL, WS_CHILD | WS_VISIBLE, 0, 0, 0, 0, Toolbar, ChildID1 + 3,
        GetModuleHandle(NULL), NULL);
    
    hwndBuildButton = CreateWindow(WC_BUTTON, L"Build", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 0, 0, 0, 0, Toolbar, ChildID1 + 4,
        GetModuleHandle(NULL), NULL);
    

    EnumChildWindows(hwnd, EditorChildProc, (LPARAM)&rect);
    
    return 0;

case WM_PAINT:

    hdc = BeginPaint(hwnd, &ps);
    
    SetTextAlign(hdc, TA_TOP);
    TextOut (hdc, archListBoxPos + 20, 5, ArchLabel, ARRAYSIZE(ArchLabel));
    TextOut(hdc, btListBoxPos, 5, BuildLabel, ARRAYSIZE(BuildLabel));
    
    EndPaint(hwnd, &ps);
    return 0;

【问题讨论】:

  • 哦!我想知道这一点。好的。谢谢!衷心感谢您的帮助。

标签: c winapi


【解决方案1】:

您需要创建一个包含文本的窗口,并将其放在工具栏的顶部。您在 wndproc 中所做的绘图始终从属于子控件:它们会将其覆盖。

【讨论】:

    猜你喜欢
    • 2011-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    • 1970-01-01
    • 2021-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多