當前我從窗口中的文本框中繪製文本。我成功地獲得了我需要繪製的文本並繪製了文本。沒關係。使用DrawText重繪C++
下面是問題:當我在輸入框中寫入其他內容並再次繪製文本(通過按鈕按下)時,新文本將在前面的文本頂部繪製出來,以期待。
我是新來的所有這一切,我無法找到一種方式來清除之前的文本,然後繪製新的文本。
這裏是我的代碼:
void DrawMyText(HWND hwnd) {
int iTextLength = GetWindowTextLength(hDrawInput) + 1;
char cDrawText[1000] = "";
HDC wdc = GetWindowDC(hwnd);
RECT canvas;
canvas.left = 168;
canvas.top = 108;
canvas.right = 500;
canvas.bottom = 500;
GetWindowText(hDrawInput, cDrawText, iTextLength);
SetTextColor(wdc, 0x00FF0066);
SetBkMode(wdc,TRANSPARENT);
DrawText(wdc, cDrawText, -1, &canvas, DT_LEFT);
DeleteDC(wdc);
}
如何做到這一點的任何提示?如果需要,我會很樂意提供任何其他信息。提前致謝!
非常感謝。我絕對想使用其他任何東西,但我絕對必須使用DrawText,這是一項大學任務。我想着背景顏色,但我想把它留作最後的可能選項。我嘗試了'InvalidateRect(hwnd,&canvas,TRUE);'在我再次繪製之前,它似乎什麼都不做。我做錯了嗎? –
嗯。而不是InvalidateRect(),請嘗試FillRect(wdc,&canvas,brush),其中brush是您創建的簡單畫筆,用於清除背景(可能只是白色?)。 InvalidateRect()應該強制重繪,但取決於你所做的任何事情都很棘手。 FillRect可能會給你更好的結果。顯然,在調用DrawText之前一定要做FillRect。 – MikeD
我喜歡噴霧比喻。 'InvalidateRect'通常是正確的做法,但它需要你處理最終的繪製消息並在重繪後臺後繪製文本。 –