mfc可变窗口大小 仅供个人使用Word格式文档下载.docx

上传人:b****5 文档编号:21611322 上传时间:2023-01-31 格式:DOCX 页数:17 大小:51.73KB
下载 相关 举报
mfc可变窗口大小 仅供个人使用Word格式文档下载.docx_第1页
第1页 / 共17页
mfc可变窗口大小 仅供个人使用Word格式文档下载.docx_第2页
第2页 / 共17页
mfc可变窗口大小 仅供个人使用Word格式文档下载.docx_第3页
第3页 / 共17页
mfc可变窗口大小 仅供个人使用Word格式文档下载.docx_第4页
第4页 / 共17页
mfc可变窗口大小 仅供个人使用Word格式文档下载.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

mfc可变窗口大小 仅供个人使用Word格式文档下载.docx

《mfc可变窗口大小 仅供个人使用Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《mfc可变窗口大小 仅供个人使用Word格式文档下载.docx(17页珍藏版)》请在冰豆网上搜索。

mfc可变窗口大小 仅供个人使用Word格式文档下载.docx

{IDC_EDIT_RECDSPDLG,ELASTICX,100},

{IDC_EDIT_RECDSPDLG,ELASTICY,100},

};

SetControlProperty(dcMenuGroup,sizeof(dcMenuGroup)/sizeof(DLGCTLINFO));

returnTRUE;

//IDCANCEL是关闭按钮的ID,IDOK按钮我去掉了所以没加,IDC_EDIT_RECDSPDLG是一个EDIT控件

//想让哪个控件调整,就照葫芦画瓢在组里加上

4,再用类向导添加OnSize()函数,也就是双击ON_WM_SIZE,这样就增加了

voidC******:

OnSize(UINTnType,intcx,intcy)这个函数,然后在这个函数里添加代码:

OnSize(nType,cx,cy);

5,别忘了在资源里右键你的非模态对话框,把属性栏Styles里Border选成Resizing。

这样就搞定了

附上网上找的那个类:

《VC中自动改变控件位置和大小的对话框类》

lxDialog.h文件:

/////////////////////////////////////////////////////////////////////////////////////

//自动改变控件位置和大小的对话框类

//文件名:

lxDialog.h

//作者:

StarLee(coolstarlee@)

classClxDialog:

publicCDialog

{

public:

ClxDialog(UINTnID,CWnd*pParent=NULL);

typedefstruct_dlgControlTag

 intiId;

 intiFlag;

 intiPercent;

}DLGCTLINFO,*PDLGCTLINFO;

enum

 MOVEX=0,

 MOVEY,

 MOVEXY,

 ELASTICX,

 ELASTICY,

 ELASTICXY

};

//设置控件信息

BOOLSetControlProperty(PDLGCTLINFOlp,intnElements);

//是否在对话框右下角显示表示可改变大小的图标

voidShowSizeIcon(BOOLbShow=TRUE);

protected:

 virtualBOOLOnInitDialog();

 afx_msgvoidOnSize(UINTnType,intcx,intcy);

 afx_msgvoidOnSizing(UINTnSide,LPRECTlpRect);

 DECLARE_MESSAGE_MAP()

private:

 intm_iClientWidth;

//对话框client区域的宽度

 intm_iClientHeight;

//对话框client区域的高度

 intm_iMinWidth;

//对话框的最小宽度

 intm_iMinHeight;

//对话框的最小高度

 PDLGCTLINFOm_pControlArray;

//控件信息数组指针

 intm_iControlNumber;

//设置控件信息的控件个数

 BOOLm_bShowSizeIcon;

//是否显示表示可改变大小的图标

 CStaticm_wndSizeIcon;

//放图标的静态控件

 //保存图标的bitmap

 CBitmapm_bmpSizeIcon;

 BITMAPm_bitmap;

lxDialog.cpp文件:

//////////////////////////////////////////////////////////////////////

lxDialog.cpp

#include"

stdafx.h"

//表示可改变大小的图标ID

#ifndefOBM_SIZE

#defineOBM_SIZE32766

#endif

ClxDialog(UINTnID,CWnd*pParent)

CDialog(nID,pParent)

m_iClientWidth(0)

m_iClientHeight(0)

m_iMinWidth(0)

m_iMinHeight(0)

m_pControlArray(NULL)

m_iControlNumber(0)

m_bShowSizeIcon(TRUE)

{}

BEGIN_MESSAGE_MAP(ClxDialog,CDialog)

 ON_WM_SIZE()

 ON_WM_SIZING()

END_MESSAGE_MAP()

BOOLClxDialog:

OnInitDialog()

 CDialog:

 //设置对话框为可变大小的

 ModifyStyle(0,WS_SIZEBOX);

 //以对话框的初始大小作为对话框的宽度和高度的最小值

 CRectrectDlg;

 GetWindowRect(rectDlg);

 m_iMinWidth=rectDlg.Width();

 m_iMinHeight=rectDlg.Height();

 //得到对话框client区域的大小

 CRectrectClient;

 GetClientRect(rectClient);

 m_iClientWidth=rectClient.Width();

 m_iClientHeight=rectClient.Height();

 //Load图标

 m_bmpSizeIcon.LoadOEMBitmap(OBM_SIZE);

 m_bmpSizeIcon.GetBitmap(&

m_bitmap);

 //创建显示图标的静态控件并放在对话框右下角

 m_wndSizeIcon.Create(NULL,WS_CHILD|WS_VISIBLE|SS_BITMAP,CRect(0,0,m_bitmap.bmWidth,m_bitmap.bmHeight),this,0);

 m_wndSizeIcon.SetBitmap(m_bmpSizeIcon);

 m_wndSizeIcon.MoveWindow(m_iClientWidth-m_bitmap.bmWidth,m_iClientHeight-m_bitmap.bmHeight,m_bitmap.bmWidth,m_bitmap.bmHeight);

 //显示图标

 m_wndSizeIcon.ShowWindow(m_bShowSizeIcon);

 returnTRUE;

}

voidClxDialog:

OnSize(UINTnType,intcx,intcy)

 //对话框宽度和高度的增量

 intiIncrementX=cx-m_iClientWidth;

 intiIncrementY=cy-m_iClientHeight;

 //最小化时增量为0

 if(nType==SIZE_MINIMIZED)

 {

  iIncrementX=iIncrementY=0;

 }

 for(inti=0;

i<

m_iControlNumber;

i++)

  CWnd*pWndCtrl=NULL;

  intiId=m_pControlArray[i].iId;

  intiFlag=m_pControlArray[i].iFlag;

  intiPercent=m_pControlArray[i].iPercent;

  //无效值

  if((iPercent<

0)||(iPercent>

100))

   continue;

  //得到控件指针

  pWndCtrl=GetDlgItem(iId);

  if((NULL!

=pWndCtrl)&

&

IsWindow(pWndCtrl->

GetSafeHwnd()))

  {

   CRectrectCtrl;

   pWndCtrl->

GetWindowRect(rectCtrl);

   ScreenToClient(rectCtrl);

   intiLeft=rectCtrl.left;

   intiTop=rectCtrl.top;

   intiWidth=rectCtrl.Width();

   intiHeight=rectCtrl.Height();

   switch(iFlag)

   {

    caseMOVEX:

//X方向移动

     iLeft+=(iIncrementX*iPercent/100);

     break;

    caseMOVEY:

//Y方向移动

     iTop+=(iIncrementY*iPercent/100);

    caseMOVEXY:

//X方向和Y方向同时移动

    caseELASTICX:

//X方向改变大小

     iWidth+=(iIncrementX*iPercent/100);

    caseELASTICY:

//Y方向改变大小

     iHeight+=(iIncrementY*iPercent/100);

    caseELASTICXY:

//X方向和Y方向同时改变大小

    default:

     ;

   }

   //把控件移动到新位置

MoveWindow(iLeft,iTop,iWidth,iHeight);

  }

 //把图标移动到对话框右下角

 if(IsWindow(m_wndSizeIcon.GetSafeHwnd()))

  m_wndSizeIcon.MoveWindow(cx-m_bitmap.bmWidth,cy-m_bitmap.bmHeight,m_bitmap.bmWidth,m_bitmap.bmHeight);

 //记录对话框client区域的大小

 if(nType!

=SIZE_MINIMIZED)

  m_iClientWidth=cx;

  m_iClientHeight=cy;

OnSizing(UINTnSide,LPRECTlpRect)

OnSizing(nSide,lpRect);

 //对话框不能小于初始大小

 intiWidth=lpRect->

right-lpRect->

left;

 intiHeight=lpRect->

bottom-lpRect->

top;

 if(iWidth<

=m_iMinWidth)

  lpRect->

right=lpRect->

left+m_iMinWidth;

 if(iHeight<

=m_iMinHeight)

bottom=lpRect->

top+m_iMinHeight;

SetControlProperty(PDLGCTLINFOlp,intnElements)

 //设置控件数组信息

 if(NULL==lp)

  returnFALSE;

 if(nElements<

=0)

 m_pControlArray=lp;

 m_iControlNumber=nElements;

ShowSizeIcon(BOOLbShow)

 m_bShowSizeIcon=bShow;

主题:

softwareFw:

对话框大小相关_在窗口属性中的border在选sizing就可以用手变化窗口了

VC++之根据对话框大小调整控件大小

悬赏分:

0-提问时间:

2010年01月19日07时27分

1、在对话框类中加入成员变量CRectm_rect;

用于保存对话框大小变化前的大小;

2、在对话框的OnInitDialog()函数中获取对话框创建时的大小:

GetClientRect(&

m_rect);

3、在WM_SIZE的响应函数OnSize()中加入以下代码:

CWnd*pWnd;

pWnd=GetDlgItem(IDC_LIST);

//获取控件句柄

if(pWnd)//判断是否为空,因为对话框创建时会调用此函数,而当时控件还未创建

CRectrect;

//获取控件变化前大小

pWnd->

GetWindowRect(&

rect);

ScreenToClient(&

//将控件大小转换为在对话框中的区域坐标

//cx/m_rect.Width()为对话框在横向的变化比例

rect.left=rect.left*cx/m_rect.Width();

/////调整控件大小

rect.right=rect.right*cx/m_rect.Width();

rect.top=rect.top*cy/m_rect.Height();

rect.bottom=rect.bottom*cy/m_rect.Height();

MoveWindow(rect);

//设置控件大小

//将变化后的对话框大小设为旧大小

以上是我在网上找的,试过,能得到想要的效果!

调试过程中,遇到点问题,还望高手指点!

在对话框属性里,设置最大化,最小化框,运行时,能最大化,最大化后也可以还原;

也能最小化,问题就出来了,最小化后,只能右键关闭,不能还原,点它,弹出错误代码,需要调试!

请问是怎么回事?

如何消除!

谢谢了啊!

最小化的时候m_rect的各个量是“0”,所以在管口还原的时候就出现了除0的异常。

如下:

怎样在在子对话框中获得父对话框的大小,并设置子对话框的大小,使其正好覆盖父对话框

请问:

getparent()或findwindow()得到父窗口, 

getwindowrect()得到父窗口的位置,大小。

 

movewindow()或setwindowpos()将子窗口移动到父窗口的位置,并改变大小。

∙网友:

papaya_stone

getparent()或findwindow()得到父窗口句柄, 

MFC对话框大小如何调节?

[互联网电脑软件电脑硬件]

悬赏点数101个回答685次浏览

LeeTeuk

2008-10-2814:

39:

53172.30.211.*举报

回答

窗体顶端

窗体底端

引用:

添加引用:

登录并发表回答

取消

在谷歌搜索MFC对话框大小如何调节?

正在发表回答,请稍候……

您输入的内容将会在您成功登录之后自动发表。

按时间排序按投票数排序

liuyangbmw

2008-10-2815:

27:

11121.29.129.*举报

简单的说可以在OnInitDialog()函数里加上一句:

RECTrect;

MoveWindow(1024-rect.right,0,rect.right,rect.bottom);

以上MoveWindow中的前两个参数就是窗体显示时的左上角坐标,

我假设你的屏幕分辨率为1024*768,所以其横坐标为1024-rect.right;

获得对话框准确像素

0-解决时间:

2008-11-1711:

02

想在对话框添加背景图片,但不知道如何获得对话框的像素,无法准确设置图片的大小。

请问如何在VC6.0或2005中使图片与对话框配置适当的大小?

提问者:

jimoffice-五级

最佳答案

获得WindowRect和ClientRect然后做一些计算//API的实现RECTrw,rc;

GetWindowRect(hwnd,&

rw);

GetClientRect(hwnd,&

rc);

OffsetRect(&

rw,-rw.left,-rw.top);

intw=图片宽+rw.right-rc.right;

inth=图片高+rw.bottom-rc.bottom;

SetWindowPos(hwnd,HWND_TOP,0,0,w,h,SWP_NOMOVE|SWP_NOZORDER);

用GetClientRect(&

rect)、GetWindowRect(&

rect)、rect.wigth()、rect.height()都能够准确获取窗口大小等

vc中更改对话框大小收藏

vc编程接触很久,但更改对话框大小最近才有点眉目.以前编的MFC程序,窗口大小都是固定的,很死板.前段时间编一个模拟定时器,尝试了更改对话框大小,也不是很难.只要掌握了窍门,对话框大小随你改变.

最近又因为项目的问题,要改变对话框大小.遇到了一个问题就是一个属性框CPropertySheet,里面又有自己从CPropertyPage派生的类.类里又调用了别人写的基于对话框的对象.所以就出现了嵌套改变对话框的问题.还好通过网上找资料,已经解决.

首先要使对话框可以更改大小,要改对话框的属性.在对话框资源上右键-->

properties->

style 

属性页里的border选为resizing.这时当对话框运行时,把鼠标放在边缘上就会出现调节大小的鼠标样式.这时当拉伸对话框时,大小就会变.因为没有写相应的处理函数.若对话框里有控件,控件并不会随对话框大小的改变而做相应的调整.

当对话框变为可调时,每当对话框大小改变时,都会触发OnSIze函数,如果没有这个函数,可以通过Winzard添加wm_size事件即可.如果要更改对话框变化时控件的位置,就要在OnSize函数里做相应的处理.可以通过GetClientRect获得当前对话框的客户区大小.最左上方是(0,0)点.如果要更改某个控件的大小,如果控件有相应的Control对象,直接调用Control对象的MoveWindwo函数即可,参数就是你想让控件去的位置.如果没有控件Control对象可以通过GetDlgItem(id),获得控件句柄,然后调用MoveWindow函数.比较麻烦的是计算相应的位置.

有时后对话框上有自己定义的一些从CWnd派生来的对象,这时首先要写这个对象的OnSize函数.当调用这个对象MoveWindow方法就会触发定义好的OnSize函数.

举一个CPo

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 畜牧兽医

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1