当前位置:开发工具->MFC ->对话框的编程及对话框中实现伸缩部分区域

原创版权标志对话框的编程及对话框中实现伸缩部分区域

作者:145742784  发表时间:2015-7-28  阅读:
[摘要] MFC编程中对话框编程的深入理解,以及设备坐标的转化理解

    我们应该在某些地方看过,有些按钮能实现对话框的伸缩功能,对此,我也比较感兴趣,在我第四遍学习MFC中,为了验证自己对对话框编程的理解特地写下这篇文章,不足之处,望大家指出,我定改正并予以感激,好!进入正题.......

            伸展后伸展前    

     如图所示,我们要实现的就是类似这样的功能,首先,我们先在VC6.0编译器中打开新的工程,然后创建一个新的对话框,打开菜单按钮,在“帮助”后面点击右键,选择属性,将名称改为对话框,点击弹出按钮,设置ID号为IDC_DAILOG,再在新建的对话框中双击,建立一个基于对话框的类响应我们新建的对话框,设为CTextDlg,然后再在我们兴建的菜单项及对话框点击右键,建立类向导和消息响应,选择view类,然后再编译器中代码如下:

CTestDlg dlg;
dlg.DoModal();
并在头文件中包含TextDlg.h,就建立了一个模态对话框,在对话框中拉入一个按钮控件,将其名称改为“收缩<<”,ID号改为IDC_BTN_EDIT
,在拉入一个图像控件,将其改为分割线,并将其ID改为IDC_SEPARATOR,右键单击“收缩<<“控件,在TextDlg类中建立类向导,写入代码如下:


void CTestDlg::OnBtnEdit() 
{
// TODO: Add your control notification handler code here
CString str;
if(GetDlgItemText(IDC_BTN_EDIT,str),str=="收缩<<")
{
SetDlgItemText(IDC_BTN_EDIT,"伸展>>");

}
else
{
SetDlgItemText(IDC_BTN_EDIT,"收缩<<");
}

static CRect rectLarge;
static CRect rectSmall;

if(rectLarge.IsRectEmpty())
{
CRect Separatorrect;
GetWindowRect(&rectLarge);
GetDlgItem(IDC_SEPARATOR)->GetWindowRect(&Separatorrect);

rectSmall.left=rectLarge.left;
rectSmall.top=rectLarge.top;
rectSmall.right=rectLarge.right;
rectSmall.bottom=Separatorrect.bottom;
}
if(str=="收缩<<")
{
SetDlgItemText(IDC_BTN_EDIT,"伸展>>");
SetWindowPos(NULL,0,0,rectSmall.Width(),rectSmall.Height(),
SWP_NOMOVE | SWP_NOZORDER);
}
else
{
SetDlgItemText(IDC_BTN_EDIT,"收缩<<");
SetWindowPos(NULL,0,0,rectLarge.Width(),rectLarge.Height(),
SWP_NOMOVE | SWP_NOZORDER);
}
}
既然标题里有设备坐标,那自然涉及到了设备坐标函数,那好,我们讲解一下,上述代码中用到的设备坐标为void GetWindowRect(LPRECT lpRect) ,不要被表面意思曲解,该函数实现以屏幕坐标的形式获得整个用户窗口的大小,同样还有BOOL ClientToScreen(HWND hWnd,LPPOINT lpPoint);以及ScreenToClient(.....),都是实现设备坐标中的屏幕坐标与用户坐标之间的转化


文章来源:C++技术网原创文章版权为网站和作者共同所有,会员文章禁止转载。非会员文章转载做好本文超链接即表示授权转载。通过文章下面的分享按钮可以自由分享所有文章。


  • sanqima    2015/8/19 22:46:09回复
    很不错,值得一看。

返回顶部

在线提问
问题标题:
问题描述:(简陋的描述会导致问题被最后回答、没有针对性回答甚至无法解答。请确保问题描述的足够清楚。)