繁体   English   中英

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

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

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

感谢您的投入,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 中所做的绘图始终从属于子控件:它们会掩盖它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM