回 帖 发 新 帖 刷新版面

主题:[原创]用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

回复列表 (共1个回复)

沙发

楼主品位太差了吧!

我来回复

您尚未登录,请登录后再回复。点此登录或注册