深入浅出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 < sizeof(ids)/sizeof(int); i++)
   {
     GetDlgItem (ids [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;
}

下面代码移动所有按钮到右侧,并且重新置属性页为合适的大小.

时间: 2024-11-16 21:52:15

深入浅出CPropertySheet的相关文章

深入浅出学习正则表达式

正则 前言: 半年前我对正则表达式产生了兴趣,在网上查找过不少资料,看过不少的教程,最后在使用一个正则表达式工具RegexBuddy时发现他的教程写的非常好,可以说是我目前见过最好的正则表达式教程.于是一直想把他翻译过来.这个愿望直到这个五一长假才得以实现,结果就有了这篇文章.关于本文的名字,使用"深入浅出"似乎已经太俗.但是通读原文以后,觉得只有用"深入浅出"才能准确的表达出该教程给我的感受,所以也就不能免俗了. 本文是Jan Goyvaerts为RegexBud

ActiveX深入浅出(一)

active|activex 纲要 可以这样说,Active平台代表了Microsoft的世界观.使用ActiveX控件,来构筑包括从与用户交互和适应COM的事务处理监视器,到Web服务器,全部实现自动化的机构,这就是Microsoft的打算了.桌面用的.基于COM的组件叫做ActiveX控件.所谓ActiveX控件不过是遵从一定的标准.与客户端交互的COM对象而已.基于组件的应用开发,其方法和组装电子装置一样,可以用已制作好的组件部件来构筑应用.这确实是一项很令人神往的技术.虽然说起来高深,但

深入浅出VC++串口编程之短信应用开发

前面数次连载我们以较长的篇幅讲解了串口通信的硬件原理.DOS平台控制以及基于WIN32 API.控件和第三方类的串口编程.作为本系列文章的最后一次连载,本章将给出一个典型的 应用实例:西门子短信服务模块TC35的串口控制. 1.短信控制终端 作为短信 (Short Message Service,SMS)一族,想必你有这样的体会:用手机编辑短信息十分不便. 容易出错,而且修改费时,若能用计算机来收发短信则方便许多.注意,本文所说的用计算 机收发短信并不是说通过"网易短信王"等方式在In

深入浅出VC++串口编程之第三方类

串口类 从本系列文章可以看出,与通过WIN32 API进行串口访问相比,通过MScomm这个Activex控 件进行串口访问要来的方便许多,它基本上可以向用户屏蔽多线程的细节,以事件(发出 OnComm消息)方式实现串口的异步访问. 尽管如此,MScomm控件的使用仍有诸多不便,譬如其发送和接收数据都要进行VARIANT类 型对象与字符串的转化等.因此,国内外许多优秀的程序员自己编写了一些串口类,使用这 些类,我们将可以更方便的操作串口.在笔者的<深入浅出Win32多线程程序设计之综合实例 >

深入浅出多线程(5)以并行包线程池为例说说线程池的设计需求及使用

接深入浅出多线程系列4, 线程对象的创建和销毁是需要花费系统资源的,通过线程池,可以避免该问 题并提高系统的响应时间.这种情形类似我们常提到的数据库连接池. 线程池的广泛应用使得在SUN在JDK 1.5的工具包提供了线程池的支持.我计 划将该系列分为设计需求与设计实现两个部分.这样会更加清晰.如果想要熟悉 ,并熟练应用线程池,那么通过设计需求篇也就是该篇就可以找到答案.如果想 探究实现的细节,那么在设计实现篇会有深入的说明. 本文以Concurrent包线程池设计为例,讨论线程池的设计. 线程池

深入浅出多线程(3)-Future异步模式以及在JDK1.5Concurrent包中的实现

接深入浅出多线程(2)在多线程交互的中,经常有一个线程需要得到另个一 线程的计算结果,我们常用的是Future异步模式来加以解决. 什么是Future模式呢?Future 顾名思义,在金融行业叫期权,市场上有看跌 期权和看涨期权,你可以在现在(比如九月份)购买年底(十二月)的石油,假 如你买的是看涨期权,那么如果石油真的涨了,你也可以在十二月份依照九月份 商定的价格购买.扯远了,Future就是你可以拿到未来的结果.对于多线程,如 果线程A要等待线程B的结果,那么线程A没必要等待B,直到B有结果

深入浅出之正则表达式

前言: 半年前我对正则表达式产生了兴趣,在网上查找过不少资料,看过不少的教程,最后在使用一个正则表达式工具RegexBuddy时发现他的教程写的非常好,可以说是我目前见过最好的正则表达式教 程.于是一直想把他翻译过来.这个愿望直到这个五一长假才得以实现,结果就有了这篇文章.关于本 文的名字,使用"深入浅出"似乎已经太俗.但是通读原文以后,觉得只有用"深入浅 出"才能准确的表达出该教程给我的感受,所以也就不能免俗了. 本文是Jan Goyvaerts为RegexBud

深入浅出Java多线程(1)-方法join

对于Java开发人员,多线程应该是必须熟练应用的知识点,特别是开发基于 Java语言的产品.本文将深入浅出的表述Java多线程的知识点,在后续的系列里 将侧重于Java5由Doug Lea教授提供的Concurrent并行包的设计思想以及具体实 现与应用. 如何才能深入浅出呢,我的理解是带着问题,而不是泛泛的看.所以该系列 基本以解决问题为主,当然我也非常希望读者能够提出更好的解决问题的方案以 及提出更多的问题.由于水平有限,如果有什么错误之处,请大家提出,共同讨 论,总之,我希望通过该系列我们

[你必须知道的.NET]第十六回:深入浅出关键字---using全接触

本文将介绍以下内容: using指令的多种用法 using语句在Dispose模式中的应用 1.引言 在.NET大家庭中,有不少的关键字承担了多种角色,例如new关键字就身兼数职,除了能够创建对象,在继承体系中隐藏基类成员,还在泛型声明中约束可能用作类型参数的参数,在[第五回:深入浅出关键字---把new说透]我们对此都有详细的论述.本文,将把目光转移到另外一个身兼数职的明星关键字,这就是using关键字,在详细讨论using的多重身份的基础上来了解.NET在语言机制上的简便与深邃. 那么,us