主题:[原创]用VC实现动态设置应用程序窗口____我的精心研究
这可是我的精心研究,大家不要错过
相信大家都用过Windows自带的计算器。它把计算分为科学计算和常规计算两类,由于日常生活中科学计算并不常用,大多数情况下四则运算就能够满足要求了,因此那些不常用的科学函数符号只在需要时显示。本文用VC通过一个实例详细介绍了此功能实现的方法。
第一步,创建应用程序框架
1)选择File|New菜单命令,并在弹出的新建对话框中单击Project标签。
2)选择MFC AppWizard(exe),并在Project Name编辑框中输入ChangeWindows作为工程名称,单击OK按钮,出现Step 1 对话框。
3)选择Dialog based 选项,使应用程序基于对话框,单击Next按钮,出现Step 2对话框。
4)以后都选缺省选项,最后单击Finish按钮,完成应用程序框架的创建。
第二步,创建对话资源
在工程工作区中单击ResourceView标签显示应用程序的资源。单击Dialog旁边的“+”,再双击IDD_CHANGEWINDOWS_DIALOG并定义编辑对话框资源。
控件 属性 设置
单选按钮 标识符 IDC_DISPLAYLEFT
标题 标准显示
单选按钮 标识符 IDC_DISPLAYALL
标题 扩展显示
按钮 标识符 IDC_BUTTON1
标题 标准显示按钮1
按钮 标识符 IDC_BUTTON2
标题 标准显示按钮2
按钮 标识符 IDC_BUTTON3
标题 扩展显示按钮1
按钮 标识符 IDC_BUTTON4
标题 扩展显示按钮2
编辑框 标识符 IDC_DISPLAY
组框架 标识符 IDC_STDDISPLAY
标题 标准显示
组框架 标识符 IDC_STATIC
标题 扩展显示
好累!
[em1]
向ChangeWindowsDlg.h 添加如下成员变量及函数:
BOOL m_bIsExpand;//标识窗口处于显示标准型还是扩展型
CRect rcDisplayLeft;//标准型窗口大小
CRect rcDisplayAll;// 扩展型窗口大小
void OnDisplayleft();//处理标准型和扩展型窗口的转换
void OnDisplayall();//在对话框改变时处理对话框控件显示与否
void ExpandToAll();//完成对话框尺寸的转换
void SetVisibleCtrl();//设置对话框中的控件
void OnStandard();//初始化标准显示
实现标准型和扩展型窗口的转换,实际上就是在程序运行时动态地设定对话框窗口尺寸。设置应用程序窗口尺寸可以调用SetWindowPos函数,该函数原型如下:
BOOL SetWindowPos(const CWnd* pWndInsertAfter, int x, int y,int cx, int cy, UINT nFlags);
其中参数pWndInsertAfter指定当前窗口改变后,在应用程序窗口对象列表的位置;参数x,y为当前窗口新的左上角坐标;参数cx,cy为当前窗口新的宽度和高度;参数nFlags指定了尺寸调整和位置改变的选项。本文中使用如下调用:
SetWindowPos(NULL,0,0,rcDisplayAll.Width(),rcDisplayAll.Height(),SWP_NOMOVE|SWP_NOZORDER);
下面是处理单击“标准型”和“扩展型”单选按钮的消息处理函数:
void CChangeWindowsDlg::OnDisplayleft()
{
m_bIsExpand=0;//显示标准型对话框
m_isLeft=1;//设置单选按钮为标准型
ExpandToAll();//改变对话框尺寸
}
累的吐血!!!稿费!!!
仅仅设置对话框的大小是不够的,还必须设置对话框中控件是否显示,如果控件在对话框当前窗口中则显示,否则不显示。完成这一功能需要以下几步:
1取得对话框中控件的指针
取得对话框中控件的指针一般使用GetWindow函数,其原型为:
CWnd* GetWindow(UINT nCmd) const;
2判断控件是否在对话框窗口中
完成这一功能需要得到对话框对话框和控件窗口的尺寸,一般使用 void GetWindowRect(LPRECT lpRect) const;
得到对话框和控件窗口的尺寸后,接下来就可以判断控件是否在对话框窗口中,由于对话框和控件窗口都用矩形来表示,因此可以调用Crect类的IntersectRect函数来完成判断,根据判断结果调用EnableWindow函数来设置其是否可见。
上述过程在SetVisibleCtrl函数中实现
上面给出了主要的编程思路,及相关方法说明,要原码和我联系:qijiangshi@21cn.com
相信大家都用过Windows自带的计算器。它把计算分为科学计算和常规计算两类,由于日常生活中科学计算并不常用,大多数情况下四则运算就能够满足要求了,因此那些不常用的科学函数符号只在需要时显示。本文用VC通过一个实例详细介绍了此功能实现的方法。
第一步,创建应用程序框架
1)选择File|New菜单命令,并在弹出的新建对话框中单击Project标签。
2)选择MFC AppWizard(exe),并在Project Name编辑框中输入ChangeWindows作为工程名称,单击OK按钮,出现Step 1 对话框。
3)选择Dialog based 选项,使应用程序基于对话框,单击Next按钮,出现Step 2对话框。
4)以后都选缺省选项,最后单击Finish按钮,完成应用程序框架的创建。
第二步,创建对话资源
在工程工作区中单击ResourceView标签显示应用程序的资源。单击Dialog旁边的“+”,再双击IDD_CHANGEWINDOWS_DIALOG并定义编辑对话框资源。
控件 属性 设置
单选按钮 标识符 IDC_DISPLAYLEFT
标题 标准显示
单选按钮 标识符 IDC_DISPLAYALL
标题 扩展显示
按钮 标识符 IDC_BUTTON1
标题 标准显示按钮1
按钮 标识符 IDC_BUTTON2
标题 标准显示按钮2
按钮 标识符 IDC_BUTTON3
标题 扩展显示按钮1
按钮 标识符 IDC_BUTTON4
标题 扩展显示按钮2
编辑框 标识符 IDC_DISPLAY
组框架 标识符 IDC_STDDISPLAY
标题 标准显示
组框架 标识符 IDC_STATIC
标题 扩展显示
好累!
[em1]
向ChangeWindowsDlg.h 添加如下成员变量及函数:
BOOL m_bIsExpand;//标识窗口处于显示标准型还是扩展型
CRect rcDisplayLeft;//标准型窗口大小
CRect rcDisplayAll;// 扩展型窗口大小
void OnDisplayleft();//处理标准型和扩展型窗口的转换
void OnDisplayall();//在对话框改变时处理对话框控件显示与否
void ExpandToAll();//完成对话框尺寸的转换
void SetVisibleCtrl();//设置对话框中的控件
void OnStandard();//初始化标准显示
实现标准型和扩展型窗口的转换,实际上就是在程序运行时动态地设定对话框窗口尺寸。设置应用程序窗口尺寸可以调用SetWindowPos函数,该函数原型如下:
BOOL SetWindowPos(const CWnd* pWndInsertAfter, int x, int y,int cx, int cy, UINT nFlags);
其中参数pWndInsertAfter指定当前窗口改变后,在应用程序窗口对象列表的位置;参数x,y为当前窗口新的左上角坐标;参数cx,cy为当前窗口新的宽度和高度;参数nFlags指定了尺寸调整和位置改变的选项。本文中使用如下调用:
SetWindowPos(NULL,0,0,rcDisplayAll.Width(),rcDisplayAll.Height(),SWP_NOMOVE|SWP_NOZORDER);
下面是处理单击“标准型”和“扩展型”单选按钮的消息处理函数:
void CChangeWindowsDlg::OnDisplayleft()
{
m_bIsExpand=0;//显示标准型对话框
m_isLeft=1;//设置单选按钮为标准型
ExpandToAll();//改变对话框尺寸
}
累的吐血!!!稿费!!!
仅仅设置对话框的大小是不够的,还必须设置对话框中控件是否显示,如果控件在对话框当前窗口中则显示,否则不显示。完成这一功能需要以下几步:
1取得对话框中控件的指针
取得对话框中控件的指针一般使用GetWindow函数,其原型为:
CWnd* GetWindow(UINT nCmd) const;
2判断控件是否在对话框窗口中
完成这一功能需要得到对话框对话框和控件窗口的尺寸,一般使用 void GetWindowRect(LPRECT lpRect) const;
得到对话框和控件窗口的尺寸后,接下来就可以判断控件是否在对话框窗口中,由于对话框和控件窗口都用矩形来表示,因此可以调用Crect类的IntersectRect函数来完成判断,根据判断结果调用EnableWindow函数来设置其是否可见。
上述过程在SetVisibleCtrl函数中实现
上面给出了主要的编程思路,及相关方法说明,要原码和我联系:qijiangshi@21cn.com