mfc可变窗口大小 仅供个人使用.doc

上传人:hw****26 文档编号:3067938 上传时间:2019-05-19 格式:DOC 页数:18 大小:161KB
下载 相关 举报
mfc可变窗口大小 仅供个人使用.doc_第1页
第1页 / 共18页
mfc可变窗口大小 仅供个人使用.doc_第2页
第2页 / 共18页
mfc可变窗口大小 仅供个人使用.doc_第3页
第3页 / 共18页
mfc可变窗口大小 仅供个人使用.doc_第4页
第4页 / 共18页
mfc可变窗口大小 仅供个人使用.doc_第5页
第5页 / 共18页
点击查看更多>>
资源描述

1、在网上有VC 中自动改变控件位置和大小的对话框类的文章开始不知道如何使用我在生成的非模态对话框里研究了一天已经搞定了步骤:1,在非模态对话框类的头文件(.h)顶部加上#include “lxDialog.h“,然后把非模态对话框类的基类改成 ClxDialog,也就是在头文件里 class C* : public CDialog 改成:class C* : public ClxDialog在非模态对话框类的.cpp 函数里,把构造函数C*:C*(CWnd* pParent ): CDialog(C*:IDD, pParent)改成:C*:C*(CWnd* pParent ): ClxDialo

2、g(C*:IDD, pParent)2,用类向导给非模态对话框添加一个 OnInitDialog()函数;也就是在双击类向导-Message Maps- 选非模态对话框类;Messages 选 WM_INITDIALOG 双击它,这样在你的非模态对话框的 cpp 文件里就生成了 ON_WM_INITDIALOG 和OnInitDialog()函数;3,在这个 OnInitDialog 函数里添加代码:ClxDialog:OnInitDialog();ClxDialog:ShowSizeIcon(TRUE);/显示可以调整大小的图标static DLGCTLINFO dcMenuGroup =

3、IDCANCEL, MOVEX, 100,IDCANCEL, MOVEY, 100,IDC_EDIT_RECDSPDLG, ELASTICX, 100,IDC_EDIT_RECDSPDLG, ELASTICY, 100,;SetControlProperty(dcMenuGroup, sizeof(dcMenuGroup)/sizeof(DLGCTLINFO);return TRUE; /IDCANCEL 是关闭按钮的 ID,IDOK 按钮我去掉了所以没加,IDC_EDIT_RECDSPDLG 是一个 EDIT 控件/想让哪个控件调整,就照葫芦画瓢在组里加上4,再用类向导添加 OnSize()

4、函数,也就是双击 ON_WM_SIZE,这样就增加了void C*:OnSize(UINT nType, int cx, int cy) 这个函数,然后在这个函数里添加代码:ClxDialog:OnSize(nType, cx, cy);5,别忘了在资源里右键你的非模态对话框,把属性栏 Styles 里 Border 选成Resizing。这样就搞定了附上网上找的那个类:VC 中自动改变控件位置和大小的对话框类lxDialog.h 文件: / 自动改变控件位置和大小的对话框类/ 文件名:lxDialog.h/ 作者:StarLee()/class ClxDialog : public CDia

5、logpublic:ClxDialog(UINT nID, CWnd* pParent = NULL);typedef struct _dlgControlTagint iId;int iFlag;int iPercent; DLGCTLINFO, *PDLGCTLINFO;enumMOVEX = 0,MOVEY,MOVEXY,ELASTICX,ELASTICY,ELASTICXY;/ 设置控件信息BOOL SetControlProperty(PDLGCTLINFO lp, int nElements);/ 是否在对话框右下角显示表示可改变大小的图标void ShowSizeIcon(BOO

6、L bShow = TRUE);protected:virtual BOOL OnInitDialog();afx_msg void OnSize(UINT nType, int cx, int cy);afx_msg void OnSizing(UINT nSide, LPRECT lpRect);DECLARE_MESSAGE_MAP()private:int m_iClientWidth; / 对话框 client 区域的宽度int m_iClientHeight; / 对话框 client 区域的高度int m_iMinWidth; / 对话框的最小宽度int m_iMinHeight

7、; / 对话框的最小高度PDLGCTLINFO m_pControlArray; / 控件信息数组指针int m_iControlNumber; / 设置控件信息的控件个数BOOL m_bShowSizeIcon; / 是否显示表示可改变大小的图标CStatic m_wndSizeIcon; / 放图标的静态控件/ 保存图标的 bitmapCBitmap m_bmpSizeIcon;BITMAP m_bitmap;lxDialog.cpp 文件:/ 自动改变控件位置和大小的对话框类/ 文件名:lxDialog.cpp/ 作者:StarLee()/#include “stdafx.h“#incl

8、ude “lxDialog.h“/ 表示可改变大小的图标 ID#ifndef OBM_SIZE#define OBM_SIZE 32766#endifClxDialog:ClxDialog(UINT nID, 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(

9、ClxDialog, CDialog)ON_WM_SIZE()ON_WM_SIZING()END_MESSAGE_MAP()BOOL ClxDialog:OnInitDialog()CDialog:OnInitDialog();/ 设置对话框为可变大小的ModifyStyle(0, WS_SIZEBOX);/ 以对话框的初始大小作为对话框的宽度和高度的最小值CRect rectDlg;GetWindowRect(rectDlg);m_iMinWidth = rectDlg.Width();m_iMinHeight = rectDlg.Height();/ 得到对话框 client 区域的大小C

10、Rect rectClient;GetClientRect(rectClient);m_iClientWidth = rectClient.Width();m_iClientHeight = rectClient.Height();/ Load 图标m_bmpSizeIcon.LoadOEMBitmap(OBM_SIZE);m_bmpSizeIcon.GetBitmap(/ 创建显示图标的静态控件并放在对话框右下角m_wndSizeIcon.Create(NULL, WS_CHILD | WS_VISIBLE | SS_BITMAP, CRect(0, 0, m_bitmap.bmWidth,

11、 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);return TRUE;void ClxDialog:OnSize(UINT nType, int

12、 cx, int cy)CDialog:OnSize(nType, cx, cy);/ 对话框宽度和高度的增量int iIncrementX = cx - m_iClientWidth;int iIncrementY = cy - m_iClientHeight;/ 最小化时增量为 0if (nType = SIZE_MINIMIZED)iIncrementX = iIncrementY = 0;for (int i = 0; i 100)continue;/ 得到控件指针pWndCtrl = GetDlgItem(iId);if (NULL != pWndCtrl) pWndCtrl-Get

13、WindowRect(rectCtrl);ScreenToClient(rectCtrl);int iLeft = rectCtrl.left;int iTop = rectCtrl.top;int iWidth = rectCtrl.Width();int iHeight = rectCtrl.Height();switch (iFlag)case MOVEX: / X 方向移动iLeft += (iIncrementX * iPercent / 100);break;case MOVEY: / Y 方向移动iTop += (iIncrementY * iPercent / 100);bre

14、ak;case MOVEXY: / X 方向和 Y 方向同时移动iLeft += (iIncrementX * iPercent / 100);iTop += (iIncrementY * iPercent / 100);break;case ELASTICX: / X 方向改变大小iWidth += (iIncrementX * iPercent / 100);break;case ELASTICY: / Y 方向改变大小iHeight += (iIncrementY * iPercent / 100);break;case ELASTICXY: / X 方向和 Y 方向同时改变大小iWid

15、th += (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

16、_bitmap.bmHeight);/ 记录对话框 client 区域的大小if (nType != SIZE_MINIMIZED)m_iClientWidth = cx;m_iClientHeight = cy;void ClxDialog:OnSizing(UINT nSide, LPRECT lpRect)CDialog:OnSizing(nSide, lpRect);/ 对话框不能小于初始大小int iWidth = lpRect-right - lpRect-left;int iHeight = lpRect-bottom - lpRect-top;if (iWidth right

17、= lpRect-left + m_iMinWidth;if(iHeight bottom = lpRect-top + m_iMinHeight;BOOL ClxDialog:SetControlProperty(PDLGCTLINFO lp, int nElements)/ 设置控件数组信息if (NULL = lp)return FALSE;if (nElements = 0)return FALSE;m_pControlArray = lp;m_iControlNumber = nElements;return TRUE;void ClxDialog:ShowSizeIcon(BOOL bShow )m_bShowSizeIcon = bShow;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育教学资料库 > 精品笔记

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。