深入浅出 CPropertySheet

2016-01-29 12:01 25 1 收藏

深入浅出 CPropertySheet,深入浅出 CPropertySheet

【 tulaoshi.com - C语言心得技巧 】

深入浅出 CPropertySheet
译者:徐景周(原作:Mustafa Demirhan)

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

为了最大限度的发挥属性页的效用,首先让我们先从 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;}

下面代码移动所有按钮到右侧,并且重新置属性页为合适的大小.
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 < sizeof (ids) / sizeof (int); i++)    {        rectBtn.top = (i + 1) * btnOffset + btnHeight * i;        rectBtn.bottom = rectBtn.top + btnHeight;        GetDlgItem (ids [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 < NUMBER_OF_TABS; i++)    {        item.iImage = i;        pTabCtrl->SetItem (i, &item );
                        

来源:http://www.tulaoshi.com/n/20160129/1484277.html

延伸阅读
九、C#编程实战演习ABC  1、用Visual Studio .NET编写C#程序 Visual Studio.NET 是Microsoft新一代的旗舰开发环境,在这个环境中,我们能够看到Microsoft将所有开发工具都集成到一个IDE中。我们惊喜地发现,我们拥有了一个所有编程语言都适用的代码编辑器。而且,这个环境中还具一个HTML 编辑器、一个XML编辑器、一个SQL Server界面以及一...
标签: SQLServer
嵌套SELECT语句也叫子查询,形如: SELECT name FROM bbc WHERE region = (SELECT region FROM bbc WHERE name = 'Brazil') 一个 SELECT 语句的查询结果可以作为另一个语句的输入值。 上面的SQL语句作用为获得和'Brazil'(巴西)同属一个地区的所有国家。 子查询不但可以出现在Where子句中,也可以出现在from子句中,作为一个临时表...
与Linux设备驱动中中断处理相关的首先是申请与释放IRQ的API: request_irq()和free_irq()。 request_irq()的原型为: int request_irq(unsigned int irq,void (*handler)(int irq, void *dev_id, struct pt_regs *regs),unsigned long irqflags,const char * devname, void *dev_id); irq是要申请的硬件...
一、引子 对于系统中一个已经完成的类层次结构,我们已经给它提供了满足需求的接口。但是面对新增加的需求,我们应该怎么做呢?如果这是为数不多的几次变动,而且你不用为了一个需求的调整而将整个类层次结构统统地修改一遍,那么直接在原有类层次结构上修改也许是个 不错 的主意。 但是往往我们遇到的却是:这样的需求变动也许...
标签: SQLServer
嵌套SELECT语句也叫子查询,形如: SELECT name FROM bbc WHERE region = (SELECT region FROM bbc WHERE name = 'Brazil') 一个 SELECT 语句的查询结果可以作为另一个语句的输入值。 上面的SQL语句作用为获得和'Brazil'(巴西)同属一个地区的所有国家。 子查询不但可以出现在Where子句中,也可以出现在from子句中,作为一个...

经验教程

429

收藏

20
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部