Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


13119 / 76738 ←次へ | 前へ→

【69127】Re:メッセージボックスの文字サイズ
発言  neptune  - 11/5/19(木) 13:48 -

引用なし
パスワード
   ▼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;
}
1 hits

【69027】メッセージボックスの文字サイズ 悩める老人 11/5/11(水) 7:59 質問
【69028】Re:メッセージボックスの文字サイズ とおりすがり 11/5/11(水) 9:09 回答
【69036】Re:メッセージボックスの文字サイズ 悩める老人 11/5/11(水) 17:34 お礼
【69030】Re:メッセージボックスの文字サイズ neptune 11/5/11(水) 10:41 回答
【69035】Re:メッセージボックスの文字サイズ Yuki 11/5/11(水) 16:07 発言
【69042】Re:メッセージボックスの文字サイズ neptune 11/5/11(水) 23:11 発言
【69119】Re:メッセージボックスの文字サイズ neptune 11/5/18(水) 22:42 発言
【69122】Re:メッセージボックスの文字サイズ Yuki 11/5/19(木) 9:44 発言
【69124】Re:メッセージボックスの文字サイズ Yuki 11/5/19(木) 10:29 発言
【69127】Re:メッセージボックスの文字サイズ neptune 11/5/19(木) 13:48 発言
【69164】Re:メッセージボックスの文字サイズ kumataka 11/5/22(日) 7:16 お礼
【69128】Re:メッセージボックスの文字サイズ neptune 11/5/19(木) 14:08 発言
【69129】Re:メッセージボックスの文字サイズ Yuki 11/5/19(木) 15:33 発言
【69125】Re:メッセージボックスの文字サイズ 角田 11/5/19(木) 11:48 回答

13119 / 76738 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free