|
▼Yuki さん:
参考になるかならないかはわかりませんが、全部は長くなるので
関係部分だけUPしておきます。
なお、中央表示の部分はどこかから拾ってきました。(どこか忘れました^ ^)
///////////////CALLBACK WndProcの該当部分だけ///////////////
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// 選択されたメニューの解析:
switch (wmId)
{
case IDC_BUTTON1:
int iret;
iret = ShowMessageBox(hWnd);
if (iret == IDOK){
MessageBox(hOwner,L"OKが押されました。",L"文字列の大きさ変更テスト",MB_OK | MB_ICONEXCLAMATION);
}
break;
/////////////////////////////////////////////////////////////////
////////////////////ShowMessageBox 関数////////////////////////////////
INT ShowMessageBox(HWND hWnd){
INT iRet;
hHook = SetWindowsHookEx(WH_CBT,&CBTHookProc,hInst,GetCurrentThreadId());
iRet = MessageBox(hWnd,L"移動テスト",L"MessageBoxSample",MB_OK);
return iRet;
}
////////////////////////////////////////////////////////
////////////////CBTHook/////////////////////////////////////
//hFont ,hOwner は広域変数としている。
LRESULT CALLBACK CBTHookProc(INT nCode, WPARAM wParam, LPARAM lParam)
{
RECT rc,rectMsg;
HWND hbutton;
switch (nCode)
{
case HCBT_ACTIVATE:
{
//'Get the coordinates of the form and the message box so that
//'you can determine where the center of the form is located
GetWindowRect(hOwner, &rc);
GetWindowRect(HWND(wParam), &rectMsg);
int x,y;
x = (rc.left + (rc.right - rc.left) / 2) -
((rectMsg.right - rectMsg.left) / 2);
y = (rc.top + (rc.bottom - rc.top) / 2) -
((rectMsg.bottom - rectMsg.top) / 2);
//Position the msgbox
SetWindowPos(HWND(wParam), 0, x, y, 0, 0,
SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
///テキストの変更(OKボタンのみのテスト)///
//ボタンの取得
hbutton = FindWindowEx(HWND(wParam),NULL,L"BUTTON",L"OK");
if (hbutton!=NULL)
{
SendMessage(hbutton,WM_SETTEXT,NULL,(LPARAM)L"良し");
//フォントを変更してみる
//CreateNewFontSize(hbutton,12,L"MS明朝");
CreateNewFontSize(hbutton,12,L"HG行書体");
//背景色も変更してみる。 オーナードロー?・・・面倒なのでこれは止めた。
}
//Release the CBT hook
UnhookWindowsHookEx(hHook);
break;
}
case HCBT_DESTROYWND:
{
DeleteObject( hFont ); // 作成した論理フォントを削除する
}
default:
{
CallNextHookEx(hHook, nCode, wParam, lParam);
break;
}
}
return FALSE;
}
//////////////////////////////////////////////////////
//-------------------------------------------------
//関数名:CreateNewFontSize
//--------------------------------------------------
//新しいフォントサイズを作成してコントロールのフォントサイズを変更する
//フォント名の変更はまだしてない。
//---------------------------------------------------
//引数
//hbutton(HWND) :ボタンのHWND
//PointSize :フォントサイズ。単位はポイント
//fname :フォント名
//////////////////////////////////////////////////////////
BOOL CreateNewFontSize(HWND hbutton,int PointSize,WCHAR *fname)
{
LOGFONT lf;
HGDIOBJ hGdiobj;
int objsize;
int iHeight;
HFONT hFont;
HDC hDC = GetDC(hbutton);
iHeight = -MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY), 72);
//フォントのハンドル取得
hGdiobj = GetCurrentObject(hDC,OBJ_FONT);
ReleaseDC(hbutton,hDC);
//初期化
ZeroMemory( &lf, sizeof(lf) );
//LOGFONT構造体の取得、変更
objsize = GetObject(hGdiobj,sizeof(lf),(LPVOID)&lf); //LOGFONT構造体の取得
lf.lfHeight = iHeight; //フォントの大きさ変更
lf.lfWidth = 0;
wcscpy(lf.lfFaceName,fname); //フォント変更
//フォント作成
hFont = CreateFontIndirect(&lf);
int iret = SendMessage(hbutton, WM_SETFONT, (WPARAM)hFont, (LPARAM)TRUE);
return TRUE;
}
|
|