如何使用DrawText()在已知句柄的给定窗口中写入文本?

4 winapi

我想知道如何使用Windows API在窗口中的给定位置开始在特定窗口上编写文本.

例如,如果窗口中要写入文本的坐标是(x,y)=(40,10)那么我需要做什么才能将一行文本写入窗口中该位置的特定窗口?

Abh*_*eet 8

假设您的窗口名称为"hwnd",并且您希望在x,y坐标处写入该窗口的文本说存储在"message"中

LPCWSTR message=L"My First Window"; 然后

RECT rect;
HDC wdc = GetWindowDC(hwnd);
GetClientRect (bgHandle, &rect) ;
SetTextColor(wdc, 0x00000000);
SetBkMode(wdc,TRANSPARENT);
rect.left=40;
rect.top=10;
DrawText( wdc, message, -1, &rect, DT_SINGLELINE | DT_NOCLIP  ) ;
DeleteDC(wdc);  
Run Code Online (Sandbox Code Playgroud)

多数民众赞成......记住这只是一个例子.

  • 不应该是GetDC(hwnd)和ReleaseDC(hwnd,wdc)吗?至少它似乎只对我有用. (3认同)
  • 这个例子中的“bgHandle”是什么? (2认同)
  • NOP!当你使用**get**you**release**eg*GetWindowDC()* - >*ReleaseDC()*.当你使用**create**你**删除**例如*CreateCompatibleDC()* - >*DeleteDC()* (2认同)

Sco*_*Dev 5

我希望这是一个更完整的答案......

void OnPaint(HWND hWnd)
{
    RECT  rect;
    PAINTSTRUCT ps;
    HDC hdc = BeginPaint(hWnd, &ps);

    GetClientRect(hWnd, &rect);
    SetTextColor(hdc, RGB(0xFF, 0x00, 0x00));
    SetBkMode(hdc, TRANSPARENT);
    rect.left = 40;
    rect.top = 10;
    DrawText(hdc, L"Hello World!", -1, &rect, DT_SINGLELINE | DT_NOCLIP);
    SelectObject(hdc, oldPen);
    DeleteObject(hPen);
    EndPaint(hWnd, &ps);
}
Run Code Online (Sandbox Code Playgroud)

然后将从 WndProc 中的 WM_PAINT 消息调用它。