1

私はprintText関数で別の壁にぶつかり、運がない解決策をしばらく探していました。

基本的に、printText関数はWM_PAINTメッセージ内で呼び出され、テキストをwin32ウィンドウにペイントします。正常に動作しますが、1回の呼び出しでのみ機能します。異なるパラメーターを使用して関数をもう一度呼び出そうとしても、何も起こらないようです。

私はもう一度何かを完全に見落としていると確信していますが、それが何であるかはわかりません。

関数は次のとおりです。

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);

}

これは「controls」クラス内にあり、呼び出しは次のとおりです。

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)から始まる赤で「テストテキスト」を印刷しますが、2行目は何も印刷しません。ただし、最初の行を削除すると、2番目の行も正常に機能します。

注意してください:私は説明している間、ここでペイントとプリントを同義語として使用したかもしれません。

ここに関連するすべてのものを含めたと思いますが、他のコードが必要な場合はお知らせください。メッセージが表示されたらすぐに投稿します:)

よろしくお願いします。時間と回答をいただければ幸いです。

4

1 に答える 1

4

ドキュメントには非常に明確に記載されています

アプリケーションは、WM_PAINTメッセージへの応答を除いて、BeginPaintを呼び出さないでください。

したがって、1回に1回だけ呼び出す必要がありWM_PAINTます。

于 2012-06-09T11:45:35.197 に答える