MFC控件大小及控件字体跟随对话框的改变而改变
2015-01-30 14:38
666 查看
1、创建一个基于对话框的windowdemoMFC应用程序。
2、下载并在windowdemoDlg.h添加easysize.h头文件。在类构造函数中添加DECLARE_EASYSIZE、CRect m_rect、CFont m_Font、x、y。
3、在OnInitDialog()函数中添加INIT_EASYSIZE;
4、定义两个消息WM_CHANG,WM_CHOOSEALL。代码分别如下:
5、添加WM_SIZE消息映射,并在响应函数中添加 如下代码:
6、在windowdemoDlg.cpp的END_MESSAGE_MAP()后添加如下代码:
7、此外还要在windowdemoDlg.h对消息进行宏定义:
8、测试的效果:
窗体原始大小:
窗体改变后:
可以看出所有控件的字符有改变,控件更改方式可以按照EASYSIZE来修改。
2、下载并在windowdemoDlg.h添加easysize.h头文件。在类构造函数中添加DECLARE_EASYSIZE、CRect m_rect、CFont m_Font、x、y。
// #include "easysize.h" #pragma once // CwindowdemoDlg 对话框 class CwindowdemoDlg : public CDialogEx { <span style="color:#FF0000;"> DECLARE_EASYSIZE CRect m_rect; CFont m_Font; int x; //用于传递窗体的宽 int y; //用于传递窗体的高 </span>
3、在OnInitDialog()函数中添加INIT_EASYSIZE;
BOOL CwindowdemoDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // 将“关于...”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须在系统命令范围内。 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 <span style="color:#FF0000;">INIT_EASYSIZE;</span> <span style="color:#FF0000;">GetClientRect(&m_rect);//获取初始窗口,用于之后的比较</span> <span style="color:#FF0000;">GetDlgItem(IDC_EDIT1)->SetWindowText(_T("this is a testdemo"));//在编辑框中显示字符,用于测试是否可以一起改变编辑框内的文字</span> return TRUE; // 除非将焦点设置到控件,否则返回 TRUE }
4、定义两个消息WM_CHANG,WM_CHOOSEALL。代码分别如下:
//根据窗口的变化,选择字体大小 afx_msg LRESULT CwindowdemoDlg::OnChang(WPARAM wParam, LPARAM lParam) { num++;//在程序的最开始时定义,并初始化为0; if(num%2==0)//在程序刚开始运行时不止调用一次的onsize函数,只有再第二次引用时m_rect.Width()才会有数值,第一次引用时为0 if(x!=m_rect.Width()||y!=m_rect.Height()) { m_Font.DeleteObject();//在不断的创建新字体时应删除上次创建的字体,否则会出错 m_Font.CreateFont( 15*x/m_rect.Width(), 0, 0, 0, 100, FALSE, FALSE, 0, GB2312_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_MODERN, _T("华文新魏" )) ; } return 0; }
//选中所有窗口内的控件,并设置字体 afx_msg LRESULT CwindowdemoDlg::OnChooseall(WPARAM wParam, LPARAM lParam) { CWnd *pWndChild; pWndChild = GetWindow(GW_CHILD); while(pWndChild) { pWndChild->SetFont(&m_Font); pWndChild = pWndChild->GetWindow(GW_HWNDNEXT); SetFont(&m_Font); } Invalidate(); UpdateWindow(); return 0; }
5、添加WM_SIZE消息映射,并在响应函数中添加 如下代码:
x=cx;//获取当前窗口宽 y=cy;//获取当前窗口高 SendMessage(WM_CHANG);//发送设置字体消息 SendMessage(WM_CHOOSEALL); //发送当前所有控件使用新字体消息 UPDATE_EASYSIZE;
6、在windowdemoDlg.cpp的END_MESSAGE_MAP()后添加如下代码:
BEGIN_MESSAGE_MAP(CwindowdemoDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_WM_SIZE() ON_MESSAGE(WM_CHANG, &CwindowdemoDlg::OnChang) ON_MESSAGE(WM_CHOOSEALL, &CwindowdemoDlg::OnChooseall) // ON_BN_CLICKED(IDCANCEL, &CwindowdemoDlg::OnBnClickedCancel) END_MESSAGE_MAP() //用于设定控件的变化 <span style="color:#FF0000;">BEGIN_EASYSIZE_MAP(CwindowdemoDlg) EASYSIZE(IDC_STATIC,ES_BORDER,ES_BORDER,ES_BORDER,ES_KEEPSIZE,ES_HCENTER) EASYSIZE(IDC_EDIT1,ES_BORDER,ES_BORDER,ES_KEEPSIZE,ES_KEEPSIZE,0) EASYSIZE(IDOK,ES_BORDER,ES_BORDER,ES_KEEPSIZE,ES_KEEPSIZE,0) EASYSIZE(IDCANCEL,ES_BORDER,ES_KEEPSIZE,ES_BORDER,ES_BORDER,0) END_EASYSIZE_MAP </span>
7、此外还要在windowdemoDlg.h对消息进行宏定义:
// windowdemoDlg.h : 头文件 // #include "easysize.h" #pragma once <span style="color:#FF0000;">#define WM_CHANG 100 #define WM_CHOOSEALL 101</span>
8、测试的效果:
窗体原始大小:
窗体改变后:
可以看出所有控件的字符有改变,控件更改方式可以按照EASYSIZE来修改。
相关文章推荐
- 改变MFC对话框背景色、控件内的字体颜色和背景色
- VC++学习笔记1--------------模式对话框中“static text”控件的字体大小改变
- 改变 MFC 对话框 static 控件的字体颜色
- VC中动态改变控件和对话框字体(大小)
- VC中动态改变控件和对话框字体(大小)
- 【转】VC中动态改变控件和对话框字体(大小)
- MFC改变对话框大小,控件的大小和位置随着改变
- mfc listcontrol控件改变字体大小
- MFC改变对话框中静态文本的字体大小
- MFC改变对话框的大小,以及子控件的动态改变
- VC中动态改变控件和对话框字体(大小)
- MFC的控件大小如何随对话框改变
- 改变对话框上某一个控件的字体和字体大小
- MFC改变对话框中静态文本的字体大小
- MFC 改变控件字体大小
- MFC控件随对话框大小改变而改变
- Visual C++中动态改变控件和对话框字体(大小) (转载)
- VC6.0中改变控件、对话框字体(大小)
- MFC 改变控件字体大小
- VC中动态改变控件和对话框字体(大小)