类似于 画图 程序里面的 颜色菜单下,点击编辑颜色,原先的对话框会加宽。如何实现类似的功能呢?
1,利用GetDlgItem 、SetDlgItemText 在按钮的消息响应函数里,进而来改变此按钮里的caption,即上面的数字。
2,利用图像控件,拉成一条横线,并把图像控件的属性中的类型改为框架,凹陷。这样以作分隔符之用。在最后,为了美观,可以将此图像控件设为Inviseble。
3, 利用GetWindowRect 获取对话框的矩形框;
利用 GetDlgItem(图像控件ID)->GetWindowRect 获取到图像控件的矩形框;
由 以上二者矩形框的坐标,得到 收缩后的新矩形的坐标。
4,利用SetWindowPos 得到更新后的矩形窗口。 注意 这个函数里要使用 SWP_NOMOVE 和SWP_NOORDER.
效果示例图片:
收缩前:
收缩后:
示例代码:
void CTestDlg::OnButton2()
{
// TODO: Add your control notification handler code here
CString str;
if(GetDlgItemText(IDC_BUTTON2,str),str=="收缩<<")
{
SetDlgItemText(IDC_BUTTON2,"扩展>>");
}
else
{
SetDlgItemText(IDC_BUTTON2,"收缩<<");
}
static CRect rectLarge;
static CRect rectSmall;
if(rectLarge.IsRectNull())
{
CRect rectSeparator;
GetWindowRect(&rectLarge);
GetDlgItem(IDC_SEPARATOR)->GetWindowRect(&rectSeparator);
rectSmall.left=rectLarge.left;
rectSmall.top=rectLarge.top;
rectSmall.right=rectLarge.right;
rectSmall.bottom=rectSeparator.bottom;
}
if(str=="收缩<<")
{
SetWindowPos(NULL,0,0,rectSmall.Width(),rectSmall.Height(),
SWP_NOMOVE | SWP_NOZORDER);
}
else
{
SetWindowPos(NULL,0,0,rectLarge.Width(),rectLarge.Height(),
SWP_NOMOVE | SWP_NOZORDER);
}
}
来源:《孙鑫VC++视频教程》第7集从01:37:38秒开始,到02:03:47 秒结束,描述的这部分内容。