深入浅出CPropertySheet.doc_第1页
深入浅出CPropertySheet.doc_第2页
深入浅出CPropertySheet.doc_第3页
深入浅出CPropertySheet.doc_第4页
深入浅出CPropertySheet.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

深入浅出 CPropertySheet为了最大限度的发挥属性页的效用,首先让我们先从 CPropertySheet 继承一个新类,取名为 CMyPropSheet.接着便可以进行下面的各种操作:一、隐藏属性页默认按钮 隐藏掉Apply应用按钮: propsheet.m_psh.dwFlags |= PSH_NOAPPLYNOW;或隐藏掉Cancel取消按钮:CWnd *pWnd = GetDlgItem( IDCANCEL );pWnd-ShowWindow( FALSE );二、移动属性页按钮首先,要获取按钮的句柄,然后就可以象对待窗体一样处理它们了. 下面代码先隐藏掉Apply和Help铵钮,再把OK和Cancel按移动到右侧。 BOOL CMyPropSheet:OnInitDialog () BOOL bResult = CPropertySheet:OnInitDialog(); int ids = IDOK, IDCANCEL;/, ID_APPLY_NOW, IDHELP ; / Hide Apply and Help buttons CWnd *pWnd = GetDlgItem (ID_APPLY_NOW); pWnd-ShowWindow (FALSE); pWnd = GetDlgItem (IDHELP); pWnd-ShowWindow (FALSE); CRect rectBtn; int nSpacing = 6; / space between two buttons. for( int i =0; i GetWindowRect (rectBtn); ScreenToClient (&rectBtn); int btnWidth = rectBtn.Width(); rectBtn.left = rectBtn.left + (btnWidth + nSpacing)* 2; rectBtn.right = rectBtn.right + (btnWidth + nSpacing)* 2; GetDlgItem (ids i)-MoveWindow(rectBtn); return bResult;下面代码移动所有按钮到右侧,并且重新置属性页为合适的大小.BOOL CMyPropSheet:OnInitDialog () BOOL bResult = CPropertySheet:OnInitDialog(); int ids = IDOK, IDCANCEL, ID_APPLY_NOW ; CRect rectWnd; CRect rectBtn; GetWindowRect (rectWnd); GetDlgItem (IDOK)-GetWindowRect (rectBtn); int btnWidth = rectBtn.Width(); int btnHeight = rectBtn.Height(); int btnOffset = rectWnd.bottom - rectBtn.bottom; int btnLeft = rectWnd.right - rectWnd.left; rectWnd.bottom = rectBtn.top; rectWnd.right = rectWnd.right + btnWidth + btnOffset; MoveWindow(rectWnd); rectBtn.left = btnLeft; rectBtn.right = btnLeft + btnWidth; for (int i = 0; i MoveWindow (rectBtn); return bResult;三、改变属性页上的标签文字首先修改TC_ITEM结构,然后用 SetItem 来修改标签文字,如下代码:TC_ITEM item;item.mask = TCIF_TEXT;item.pszText = New Label;/Change the label of the first tab (0 is the index of the first tab).GetTabControl ()-SetItem (0, &item);四、改变属性页标签文字的字体属性代码如下m_NewFont.CreateFont (14, 0, 0, 0, 800, TRUE, 0, 0, 1, 0, 0, 0, 0, _T(Arial) ); GetTabControl()-SetFont (&m_NewFont);五、在属性页标签上显示位图 可以用 CImageList 建立图像. 用 SetItem 来设置,如下代码所示:BOOL CMyPropSheet:OnInitDialog () BOOL bResult = CPropertySheet:OnInitDialog(); m_imageList.Create (IDB_MYIMAGES, 13, 1, RGB(255,255,255); CTabCtrl *pTabCtrl = GetTabControl (); pTabCtrl-SetImageList (&m_imageList); TC_ITEM item; item.mask = TCIF_IMAGE; for (int i = 0; i SetItem (i, &item ); return bResult;六、在属性页左下角显示位图如下代码所示: void CMyPropSheet:OnPaint () CPaintDC dc(this); / device context for painting int nOffset = 6; / load IDB_BITMAP1 from our resources CBitmap bmp; if (bmp.LoadBitmap (IDB_BITMAP1) / Get the size of the bitmap BITMAP bmpInfo; bmp.GetBitmap (&bmpInfo); / Create an in-memory DC compatible with the / display DC were using to paint CDC dcMemory; dcMemory.CreateCompatibleDC (&dc); / Select the bitmap into the in-memory DC CBitmap* pOldBitmap = dcMemory.SelectObject (&bmp); / Find a bottom-left point for the bitmap in the client area CRect rect; GetClientRect (&rect); int nX = rect.left + nOffset; int nY = rect.top + (rect.Height () - bmpInfo.bmHeight) - nOffset; / Copy the bits from the in-memory DC into the on- / screen DC to actually do the painting. Use the centerpoint / we computed for the target offset. dc.BitBlt (nX, nY, bmpInfo.bmWidth, bmpInfo.bmHeight, &dcMemory, 0, 0, SRCCOPY); dcMemory.SelectObject (pOldBitmap); / Do not call CPropertySheet:OnPaint() for painting messages七、在属性页右下角显示3D文字Logo代码如下:void CMyPropSheet:OnPaint () /在TAB按钮旁边显示3D文字提示,jingzhou xuCstring m_LogoName = “属性页”;/if(m_LogoName = )/return;GetWindowRect(rect);ScreenToClient(rect);LOGFONT logFont;ZeroMemory(void*)&logFont,sizeof(logFont);strcpy(logFont.lfFaceName,宋体);logFont.lfHeight = -12;logFont.lfWeight = 400;logFont.lfCharSet = GB2312_CHARSET;logFont.lfOutPrecision = 3;logFont.lfClipPrecision = 2; logFont.lfQuality = 1;logFont.lfPitchAndFamily = 2;m_font.CreateFontIndirect(&logFont);SetFont(&m_font);CFont*pOldFont = pDC-SelectObject(&m_font);rect.left += 6;rect.right -= 6;rect.bottom -= 1;rect.top = rect.bottom - ITEMBUTTON_HEIGHT + 1;CFont m_LogoFont;CString sLogoString;m_LogoFont.CreateFont(rect.Height()*4/5, 0, 0, 0, FW_BOLD, 1, FALSE, FALSE,DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,FIXED_PITCH | FF_ROMAN, 楷体_GB2312);sLogoString = m_LogoName;RECT m_rDataBox;CopyRect(&m_rDataBox,&rect);TEXTMETRIC tm;pDC-GetTextMetrics(&tm);CFont* oldFont = pDC-SelectObject(&m_LogoFont);CSize sz = pDC-GetTextExtent(sLogoString, sLogoString.GetLength();/用GetTextExtent来计算字体logo大小,依靠于设备环境,使用logo位于右下角m_rDataBox.left = m_rDataBox.right - sz.cx - tm.tmAveCharWidth/2;m_rDataBox.top = m_rDataBox.bottom - sz.cy - tm.tmHeight/5;pDC-SetBkMode(TRANSPARENT);/用3D字体显示,先黑后白,最后再用默认色COLORREF oldColor = pDC-SetTextColor(GetSysColor(COLOR_3DDKSHADOW);pDC-DrawText(sLogoString, sLogoString.GetLength(), &m_rDataBox, DT_VCENTER | DT_SINGLELINE | DT_CENTER);m_rDataBox.left -= tm.tmAveCharWidth;pDC-SetTextColor(GetSysColor(COLOR_3DHILIGHT);pDC-DrawText(sLogoString, sLogoString.GetLength(), &m_rDataBox, DT_VCENTER | DT_SINGLELINE | DT_CENTER);m_rDataBox.left += 3*tm.tmAveCharWidth/5;pDC-SetTextColor(RGB(0,0,255);pDC-DrawText(sLogoString, sLogoString.GetLength(), &m_rDataBox, DT_VCENTER | DT_SINGLELINE | DT_CENTER);/释放资源pDC-SelectObject(oldFont);pDC-SetTextColor(oldColor); m_LogoFont.DeleteObject();/八、在属性页中动态加入其它控件下面演示如何在左下角加入一Edit控件:MyPropSheet.h中:public: CEdit m_edit;MyPropSheet.cpp中:BOOL CMyPropSheet:OnInitDialog () BOOL bResult = CPropertySheet:OnInitDialog (); CRect rect; int nHeight = 24; int nWidth = 120; int nOffset = 6; GetClientRect (&rect); / Find a bottom-left point for the edit control in th

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论