我已經在我的printText函數中打了另一面牆,並且一直在尋找一段時間,但沒有運氣的解決方案。WINAPI BeginPaint和TextOut在自定義函數中多次調用
基本上,在WM_PAINT消息中調用printText函數來將文本繪製到win32窗口。它工作正常,但只有一個電話。如果我嘗試用不同的參數第二次調用該函數,則不會出現任何情況。
我確定我只是完全忽略了一些東西,但我看不出它可能是什麼。
的功能如下:
void controls::printText(unsigned char R, unsigned char G, unsigned char B, int x, int y, LPCSTR text, HWND parent, PAINTSTRUCT pss, HDC hdc)
{
hdc = BeginPaint(parent, &pss);
SetBkMode(hdc, TRANSPARENT);
SetTextColor(hdc, RGB(R,G,B));
TextOut(hdc, x, y, text, strlen(text));
EndPaint(parent, &pss);
}
這是一個 '對照' 類內部和呼叫如下:
HDC hdc, hdc2;
PAINTSTRUCT ps, ps2;
ctrls->printText(255,0,0,30,50,"Test text",hWnd,ps,hdc);
ctrls->printText(255,0,0,30,80,"test text 2",hWnd,ps2,hdc2);
有兩個(2)HDC和PAINTSTRUCT聲明作爲我一直在玩代碼試圖找到一個解決方案;我嘗試從函數中刪除paintstruct和hdc參數,並讓它們在函數內部作爲本地聲明(這對我來說沒有多大意義)而沒有成功。
基本上,第一線,
ctrls->printText(255,0,0,30,50,"Test text",hWnd,ps,hdc);
會做,因爲它應該和打印「測試文本」,在紅,從(30,50),但第二行不顯示任何信息。如果我刪除第一行,但是,第二行也可以正常工作。
請注意:在描述時,我可能在這裏使用油漆和同義字。
我想我已經包括了相關的一切在這裏,但如果需要任何其他的代碼只是讓我知道,我會盡快發佈它,因爲我看到消息:)提前
再次感謝球員, 你的時間和答案非常感謝。
在那裏,我再次忽略簡單的事情-.- 你,我的朋友,是一個天才。您的響應激發了我在WM_PAINT消息中更改了調用BeginPaint的代碼,並僅將該函數用於TextOut()函數。 非常感謝:) – Timmy
@Timmy,常見的做法是將'BeginPaint'中的'HDC'傳遞給函數。 – chris