vc2008 Express Edition, SDK, Vista SP1
ステータスバーをオーナードローしたいのですが、第2区画が表示されません。
どこがおかしいのでしょうか?
http://www.kumei.ne.jp/c_lang/sdk/sdk_60.htm
↑を参考に作成しました。
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
int part_size[] = {90, 180};
LPDRAWITEMSTRUCT lpds;
int st_id;
RECT rc;
HFONT hFont, hFontOld;
switch (message)
{
case WM_CREATE:
InitCommonControls();
hStatusBar = CreateWindowEx( 0,
STATUSCLASSNAME,
NULL,
WS_CHILD | WS_VISIBLE | SBS_SIZEGRIP,
0, 0, 0, 0,
hWnd, //親ウィンドウ
(HMENU)ID_STATUS,
hInst,
NULL);
SendMessage(hStatusBar, SB_SETPARTS, (WPARAM)3, (LPARAM)(LPINT)part_size);
SendMessage(hStatusBar, SB_SETTEXT, (WPARAM)0 | SBT_OWNERDRAW, (LPARAM)NULL);
SendMessage(hStatusBar, SB_SETTEXT, (WPARAM)1 | SBT_OWNERDRAW, (LPARAM)NULL);
break;
case WM_DRAWITEM:
lpds = (LPDRAWITEMSTRUCT)lParam;
st_id = lpds->CtlID;
if(st_id == ID_STATUS)
{
if(lpds->itemID == 0)
{// 0 の描画
CopyRect((LPRECT)&rc, (LPRECT)&lpds->rcItem);
hFont = SetMyFont(MS ゴシック, 14);
hFontOld = (HFONT)SelectObject(lpds->hDC, hFont);
SetTextColor(lpds->hDC, RGB(255, 0, 0));
SetBkMode(lpds->hDC, TRANSPARENT);
TextOut(lpds->hDC, 0, 0, abc, 3);
SelectObject(lpds->hDC, hFontOld);
DeleteObject(hFont);
return TRUE;
}
else if(lpds->itemID == 1)
{// 1 の描画
CopyRect((LPRECT)&rc, (LPRECT)&lpds->rcItem);
hFont = SetMyFont(MS 明朝, 16);
hFontOld = (HFONT)SelectObject(lpds->hDC, hFont);
SetTextColor(lpds->hDC, RGB(255, 255, 0));
SetBkMode(lpds->hDC, TRANSPARENT);
TextOut(lpds->hDC, 0, 0, def, 3);
SelectObject(lpds->hDC, hFontOld);
DeleteObject(hFont);
return TRUE;
}
}
break;
case WM_SIZE:
SendMessage(hStatusBar, WM_SIZE, wParam, lParam);
break;
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// 選択されたメニューの解析:
switch (wmId)
{
case IDM_ABOUT:
DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: 描画コードをここに追加してください...
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
HFONT SetMyFont(LPCTSTR face, int h)
{
HFONT hFont;
hFont = CreateFont(h, //フォント高さ
0, //文字幅
0, //テキストの角度
0, //ベースラインとx軸との角度
FW_REGULAR, //フォントの重さ(太さ)
FALSE, //イタリック体
FALSE, //アンダーライン
FALSE, //打ち消し線
SHIFTJIS_CHARSET, //文字セット
OUT_DEFAULT_PRECIS, //出力精度
CLIP_DEFAULT_PRECIS,//クリッピング精度
PROOF_QUALITY, //出力品質
FIXED_PITCH | FF_MODERN,//ピッチとファミリー
face); //書体名
return hFont;
}
参考にされたページと比較してみると
TextOutの描画位置が違うのが気になります。
原点からの描画で合っていれば問題はないんだけど・・・
subaruさん、そのとおりでした。
ありがとうございました。