OS:Windows2000
VS.NET2003
にて開発を行っております。
SDIベースFormViewのフォントとダイアログのフォントを起動時に
変更する、にチャレンジしているのですが、ダイアログはDoModal()を
オーバーライドする以下のソースで実現できました。
INT_PTR CxxxDlg::DoModal()
{
CDialogTemplate dlt;
INT_PTR nResult;
if (!dlt.Load(MAKEINTRESOURCE(CxxxDlg::IDD))) return -1;
dlt.SetFont("MS UI Gothic", 14);
LPSTR pdata = (LPSTR)GlobalLock(dlt.m_hTemplate);
m_lpszTemplateName = NULL;
InitModalIndirect(pdata);
nResult = CDialog::DoModal();
GlobalUnlock(dlt.m_hTemplate);
return nResult;
}
ただし、ActiveXは上の方法だと表示自体されません。
リソースエディタでダイアログのフォントを変更するとActiveXも他のコントロール
と同様に伸縮します。
FormViewのフォントを起動時に変更する方法とActiveXを表示するには
どのような処理を行えば実現できるのでしょうか。
よろしくお願いします。
バグっぽいですね。
以下のようにしてみてください。
LPCTSTR pszId = MAKEINTRESOURCE(CxxxDlg::IDD);
HINSTANCE hInst = AfxFindResourceHandle(pszId, RT_DLGINIT);
HRSRC hResource = FindResource(hInst, pszId, RT_DLGINIT);
HGLOBAL hDlgInit = LoadResource(hInst, hResource);
void* pDlgInit = LockResource(hDialogTemplate);
CDialogTemplate dt;
dt.Load(pszId);
//dtをいじる
LPCDLGTEMPLATE pTemplate =
(LPCDLGTEMPLATE)LockResource(dt.m_hTemplate);
m_lpszTemplateName = NULL;
InitModalIndirect(pTemplate, m_pParentWnd, pDlgInit);
//表示
//後始末
なるです。
dairygoodsさん、ありがとうございます。
ActiveXも表示することができました。
>void* pDlgInit = LockResource(hDialogTemplate);
はvoid* pDlgInit = LockResource(hDlgInit);
ですよね。
あと、FormViewの変更方法がわからないのですが、ご教授いただけないでしょうか。
よろしくお願いします。
>>void* pDlgInit = LockResource(hDialogTemplate);
>はvoid* pDlgInit = LockResource(hDlgInit);
>ですよね。
そうですね。すみません、記述ミスです。
> あと、FormViewの変更方法がわからないのですが、ご教授いただけないでしょうか。
FormView の場合、VIEWFORM.CPP の CFormView::Create() 関数内で、
CreateDlg を呼び出して、ダイアログを作っています。
この部分を自分で用意したテンプレートと置き換える仕組みは
用意されていないように見えます。
CFormView::Create() をオーバーライドして、
関数の中身を丸ごとコピーし、
CreateDlg 呼出しの部分だけを書き換える
といった方法しかなさそうです。
dairygoodsさん、返事が大変遅くなって申し訳ありませんでした。
Create関数とCreateDlg関数をオーバーライドし、CreateDlg関数内
CreateDlgIndirectに自分で用意したテンプレートを引数に与えることで
実現できました。
CreateDlg関数はafximpl.hをインポートし、dlgcore.cppのものをコピーして使用しました。
dairygoodsさんのヒントからやっとゴールできました。
ありがとうございました。
ツイート | ![]() |