《VC中自动改变控件位置和大小的对话框类》使用方法.docx

上传人:b****1 文档编号:3196781 上传时间:2023-05-05 格式:DOCX 页数:10 大小:16.86KB
下载 相关 举报
《VC中自动改变控件位置和大小的对话框类》使用方法.docx_第1页
第1页 / 共10页
《VC中自动改变控件位置和大小的对话框类》使用方法.docx_第2页
第2页 / 共10页
《VC中自动改变控件位置和大小的对话框类》使用方法.docx_第3页
第3页 / 共10页
《VC中自动改变控件位置和大小的对话框类》使用方法.docx_第4页
第4页 / 共10页
《VC中自动改变控件位置和大小的对话框类》使用方法.docx_第5页
第5页 / 共10页
《VC中自动改变控件位置和大小的对话框类》使用方法.docx_第6页
第6页 / 共10页
《VC中自动改变控件位置和大小的对话框类》使用方法.docx_第7页
第7页 / 共10页
《VC中自动改变控件位置和大小的对话框类》使用方法.docx_第8页
第8页 / 共10页
《VC中自动改变控件位置和大小的对话框类》使用方法.docx_第9页
第9页 / 共10页
《VC中自动改变控件位置和大小的对话框类》使用方法.docx_第10页
第10页 / 共10页
亲,该文档总共10页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

《VC中自动改变控件位置和大小的对话框类》使用方法.docx

《《VC中自动改变控件位置和大小的对话框类》使用方法.docx》由会员分享,可在线阅读,更多相关《《VC中自动改变控件位置和大小的对话框类》使用方法.docx(10页珍藏版)》请在冰点文库上搜索。

《VC中自动改变控件位置和大小的对话框类》使用方法.docx

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

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

在网上有介绍文章,开始不知道如何使用

我在生成的非模态对话框里研究了一天已经搞定了

步骤:

1,在非模态对话框类的头文件(.h)顶部加上#include"lxDialog.h",然后把非模态对话框类的基类改成ClxDialog,也就是在头文件里classC******:

publicCDialog改成:

classC******:

publicClxDialog

在非模态对话框类的.cpp函数里,把构造函数

C*****:

:

C*****(CWnd*pParent):

CDialog(C*****:

:

IDD,pParent)

改成:

C*****:

:

C*****(CWnd*pParent):

ClxDialog(C*****:

:

IDD,pParent)

2,用类向导给非模态对话框添加一个OnInitDialog()函数;也就是在双击类向导->MessageMaps->选非模态对话框类;Messages选WM_INITDIALOG双击它,这样在你的非模态对话框的cpp文件里就生成了ON_WM_INITDIALOG和OnInitDialog()函数;

3,在这个OnInitDialog函数里添加代码:

 ClxDialog:

:

OnInitDialog();

 ClxDialog:

:

ShowSizeIcon(TRUE);//显示可以调整大小的图标

staticDLGCTLINFOdcMenuGroup[]=

   {  

       {IDCANCEL,MOVEX,100},

       {IDCANCEL,MOVEY,100},

       {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)这个函数,然后在这个函数里添加代码:

ClxDialog:

:

OnSize(nType,cx,cy);

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

这样就搞定了

 

附上网上找的那个类:

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

 

lxDialog.h文件:

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

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

//文件名:

lxDialog.h

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

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"

#include"lxDialog.h"

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

#ifndefOBM_SIZE

#defineOBM_SIZE32766

#endif

ClxDialog:

:

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:

:

OnInitDialog();

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

 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)

{

 CDialog:

:

OnSize(nType,cx,cy);

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

 intiIncrementX=cx-m_iClientWidth;

 intiIncrementY=cy-m_iClientHeight;

 //最小化时增量为0

 if(nType==SIZE_MINIMIZED)

 {

  iIncrementX=iIncrementY=0;

 }

 for(inti=0;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);

     break;

    caseMOVEXY:

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

     iLeft+=(iIncrementX*iPercent/100);

     iTop+=(iIncrementY*iPercent/100);

     break;

    caseELASTICX:

//X方向改变大小

     iWidth+=(iIncrementX*iPercent/100);

     break;

    caseELASTICY:

//Y方向改变大小

     iHeight+=(iIncrementY*iPercent/100);

     break;

    caseELASTICXY:

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

     iWidth+=(iIncrementX*iPercent/100);

     iHeight+=(iIncrementY*iPercent/100);

     break;

    default:

     ;

   }

   //把控件移动到新位置

   pWndCtrl->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;

 }

}

voidClxDialog:

:

OnSizing(UINTnSide,LPRECTlpRect)

{

 CDialog:

:

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)

  lpRect->bottom=lpRect->top+m_iMinHeight;

}

BOOLClxDialog:

:

SetControlProperty(PDLGCTLINFOlp,intnElements)

{

 //设置控件数组信息

 if(NULL==lp)

  returnFALSE;

 if(nElements<=0)

  returnFALSE;

 m_pControlArray=lp;

 m_iControlNumber=nElements;

 returnTRUE;

}

voidClxDialog:

:

ShowSizeIcon(BOOLbShow)

{

 m_bShowSizeIcon=bShow;

}

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

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2