MFCにおけるコントロールサイズはダイアログサイズとともに動的に変化する
まず***Dlgで.hヘッダファイルで定義
[cpp] view plain copy print ?
CRect m_rectmin;//初期化ダイアログを格納するサイズ CRect Button1Rectinit;//初期化コントロールを格納するサイズ
次に変化関数を定義します
[cpp] view plain copy print ?
//コントロールサイズ位置ダイアログサイズに従って任意に変化する//パラメータはコントロールIDコントロール初期化パラメータlpRect void autosize(UINT nID,LPRECT lpRect);
*Dlgでcppファイルに、次のコードを追加します.
[cpp] view plain copy print ?
***Dlg::OnInitDialog() {
****** GetWindowRect(&m_rectmin);//ダイアログサイズの初期値 を取得
//取得ダイアログボックス内の各コントロールのサイズ初期値 CWnd *pWnd; pWnd = GetDlgItem(IDC_BUTTON1);//取得ボタン1ハンドル pWnd->GetWindowRect(&Button1Rectinit); ********
}
[cpp] view plain copy print ?
void CPISProcToolsDlg::autosize(UINT nID,LPRECT lpRect) {
CWnd *pWnd; pWnd = GetDlgItem(nID);//コントロールハンドル を取得する
if(!pWnd) return;//空かどうかを判断します.ダイアログの作成時にこの関数が呼び出されるため、コントロールはまだを作成していません.
CRect rect,recttemp;//rectをコントロール変更後のパラメータとして定義する GetClientRect(&recttemp);//recttemp変更取得後ダイアログボックスカスタマーサイズ //各パラメータ値を計算し、各値メインウィンドウの相対値を利用して を計算する.
rect.left = recttemp.Width() * lpRect->left/m_rectmin.Width(); rect.right = recttemp.Width() * lpRect->right/m_rectmin.Width();
rect.top = recttemp.Height() * lpRect->top/m_rectmin.Height(); rect.bottom = recttemp.Height() * lpRect->bottom/m_rectmin.Height();
pWnd->MoveWindow(rect);//コントロール位置の調整 }
そしてWM_をリロードSIZE関数とWM_OnGetMinMaxInfo関数:
[cpp] view plain copy print ?
void CPISProcToolsDlg::OnSize(UINT nType, int cx, int cy) {
CDialog::OnSize(nType, cx, cy);
//TODO:ここにメッセージハンドラコードを追加 if(nType == SIZE_MINIMIZED) return;//ウィンドウの最小化を防止する際に予知できない問題が発生する .
autosize(IDC_BUTTON1,Button1Rectinit); }
[cpp] view plain copy print ?
void CPISProcToolsDlg::OnGetMinMaxInfo(MINMAXINFO*lpMMI)/制限ダイアログサイズ下限 {
//TODO:ここにメッセージハンドラコードを追加するか、デフォルト値を呼び出す. lpMMI-> ptMinTrackSize.x = m_rectmin.Width() ;//幅 lpMMI-> ptMinTrackSize.y = m_rectmin.Height() ;//高さ
CDialog::OnGetMinMaxInfo(lpMMI); }
この記事は【http://blog.csdn.net/fc841105/article/details/6717111】
[cpp] view plain copy print ?
CRect m_rectmin;//初期化ダイアログを格納するサイズ
CRect m_rectmin;//
CRect Button1Rectinit;//
次に変化関数を定義します
[cpp] view plain copy print ?
//コントロールサイズ位置ダイアログサイズに従って任意に変化する
//
// ID lpRect
void autosize(UINT nID,LPRECT lpRect);
*Dlgでcppファイルに、次のコードを追加します.
[cpp] view plain copy print ?
***Dlg::OnInitDialog()
******
}
***Dlg::OnInitDialog()
{
******
GetWindowRect(&m_rectmin);//
//
CWnd *pWnd;
pWnd = GetDlgItem(IDC_BUTTON1); // 1
pWnd->GetWindowRect(&Button1Rectinit);
********
}
[cpp] view plain copy print ?
void CPISProcToolsDlg::autosize(UINT nID,LPRECT lpRect)
CWnd *pWnd;
if(!pWnd) return;//空かどうかを判断します.ダイアログの作成時にこの関数が呼び出されるため、コントロールはまだを作成していません.
CRect rect,recttemp;//rectをコントロール変更後のパラメータとして定義する
rect.left = recttemp.Width() * lpRect->left/m_rectmin.Width();
rect.top = recttemp.Height() * lpRect->top/m_rectmin.Height();
void CPISProcToolsDlg::autosize(UINT nID,LPRECT lpRect)
{
CWnd *pWnd;
pWnd = GetDlgItem(nID); //
if(!pWnd) return; // , ,
CRect rect,recttemp; // rect
GetClientRect(&recttemp); //recttemp
// ,
rect.left = recttemp.Width() * lpRect->left/m_rectmin.Width();
rect.right = recttemp.Width() * lpRect->right/m_rectmin.Width();
rect.top = recttemp.Height() * lpRect->top/m_rectmin.Height();
rect.bottom = recttemp.Height() * lpRect->bottom/m_rectmin.Height();
pWnd->MoveWindow(rect);//
}
そしてWM_をリロードSIZE関数とWM_OnGetMinMaxInfo関数:
[cpp] view plain copy print ?
void CPISProcToolsDlg::OnSize(UINT nType, int cx, int cy)
CDialog::OnSize(nType, cx, cy);
//TODO:ここにメッセージハンドラコードを追加
autosize(IDC_BUTTON1,Button1Rectinit);
void CPISProcToolsDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
// TODO:
if(nType == SIZE_MINIMIZED) return;//
autosize(IDC_BUTTON1,Button1Rectinit);
}
[cpp] view plain copy print ?
void CPISProcToolsDlg::OnGetMinMaxInfo(MINMAXINFO*lpMMI)/制限ダイアログサイズ下限
//TODO:ここにメッセージハンドラコードを追加するか、デフォルト値を呼び出す.
CDialog::OnGetMinMaxInfo(lpMMI);
void CPISProcToolsDlg::OnGetMinMaxInfo(MINMAXINFO* lpMMI)//
{
// TODO: /
lpMMI-> ptMinTrackSize.x = m_rectmin.Width() ; //
lpMMI-> ptMinTrackSize.y = m_rectmin.Height() ; //
CDialog::OnGetMinMaxInfo(lpMMI);
}
この記事は【http://blog.csdn.net/fc841105/article/details/6717111】