Win32 API - 使用 TextOut 在工具栏的空白区域上绘制

Win32 API - Using TextOut to draw over a blank area of a tool bar

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

感谢您的意见,David 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;

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