こんにちは、私WNDCLASSEX
はこのデータを持つ構造を持っています:
m_wndClass.cbSize = sizeof(WNDCLASSEX);
m_wndClass.style = CS_NOCLOSE;
m_wndClass.lpfnWndProc = WndProc;
m_wndClass.cbClsExtra = 0;
m_wndClass.cbWndExtra = 0;
m_wndClass.hInstance = GetModuleHandle(NULL);
m_wndClass.hIcon = NULL;
m_wndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
m_wndClass.hbrBackground = NULL;
m_wndClass.lpszMenuName = NULL;
m_wndClass.lpszClassName = Checkbox::CHECKBOX_CLASS.c_str();
m_wndClass.hIconSm = NULL;
親ウィンドウにテキストを描画する必要があり、テキストは任意の色になる可能性があるため、背景のないウィンドウが必要です。
描画は正常に機能します。描画用のコード:
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC dc = BeginPaint(window, &ps);
if (!classInfo->m_text.empty())
{
HDC wdc = GetDC(window);
SetBkMode(wdc,TRANSPARENT);
DrawText(wdc, classInfo->m_text.c_str(), -1, &classInfo->m_textRect, DT_CENTER | DT_VCENTER | DT_SINGLELINE | DT_NOCLIP);
ReleaseDC(window, wdc);
}
EndPaint(window, &ps);
break;
}
ただし、ラベルのテキストを変更する方法があります。
void Checkbox::SetText(const String& text)
{
m_text = text;
SetTextRectSize(); //calculates size of RECT
if (m_window != NULL)
InvalidateRect(m_window, NULL, TRUE);
}
ラベル付きのウィンドウを作成した後、ラベルが表示されますが、テキストを変更したい場合は変更されません (手動でウィンドウのサイズを変更する必要があり、その後変更されます)。ただし、背景に色を付けていたときは、この問題はありませんでした。たとえば、ウィンドウ クラスには次のようなものがあります。
m_wndClass.hbrBackground = HBRUSH(COLOR_3DFACE+1);
背景のないウィンドウを更新する方法を教えてください。
編集: 私はいくつかのものを試しました
FillRect(dc, &rect, (HBRUSH)GetStockObject(NULL_BRUSH));
ウィンドウプロシージャも変更しようとしました:
case WM_CTLCOLORSTATIC:
{
HDC hdc = (HDC) wp;
SetBkMode (hdc, TRANSPARENT);
return (LRESULT)GetStockObject(NULL_BRUSH);
}
その結果、ラベルの一部に設定text
した後、以前に新しいテキストを描画すると破損します! これを参照してください。ただし、メイン ウィンドウのサイズを変更すると、ラベルが読めるようになります。some longer text