windows-MFC 在 ToolBar 上创建 ComboBox 发现大小不符合期望值

问题描述

MFC 在 ToolBar 上创建 ComboBox 发现大小不符合期望值

正在学习 MFC,使用的教材是《MFC Windows 程序设计(第二版)》;
学习到第十二章,跟着书上的例子 MYWORD 自己重头创建一个 MFC 工程;
这个例子会在 ToolBar 上创建两个 ComboBox 供用户选择字体和字号;
问题来了,我创建出来的 ComboBox 大小并不符合预期的大小;
希望各位前辈帮忙看看是怎么回事,先谢谢各位了 !!


上面两张图片,第一章是书上例子的效果,第二章是我自己做出来的效果;
下面是自己写的代码:

 int CStyleBar::OnCreate( LPCREATESTRUCT _cs ){
    const int FONTSIZE[ ] = {
        8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 26, 28, 32, 36, 48, 72
    };
    const int DIM = sizeof( FONTSIZE ) / sizeof( FONTSIZE[ 0 ] );
    int char_w = 0;
    int char_h = 0;
    CRect rc_item;
    CClientDC dc( this );
    CFont * prev_font = nullptr;
    TEXTMETRIC tm = { 0 };
    CString tmp;

    if( -1 == CToolBar::OnCreate( _cs ) )
        return -1;
    if( ! LoadToolBar( IDR_STYLEBAR ) )
        return -1;

    font.CreatePointFont( 80, _T( "MS Sans Serif" ) );
    prev_font = dc.SelectObject( & font );
    dc.GetTextMetrics( & tm );
    char_w = tm.tmAveCharWidth;
    char_h = tm.tmHeight + tm.tmExternalLeading;
    dc.SelectObject( prev_font );

    SetButtonInfo( 8, IDC_FONTNAME_LIST, TBBS_SEPARATOR, char_w * 32 );
    GetItemRect( 8, & rc_item );
    rc_item.bottom = rc_item.top + ( char_h * 16 );
    if( ! font_name_list.Create( WS_CHILD | WS_VISIBLE | WS_VSCROLL |
        CBS_DROPDOWNLIST | CBS_SORT, rc_item, this, IDC_FONTNAME_LIST ) )
        return -1;
    font_name_list.SetFont( & font );
    initFontList( dc );
    font_name_list.SetCurSel( 0 );

    SetButtonInfo( 10, IDC_FONTSIZE_LIST, TBBS_SEPARATOR, char_w * 12 );
    GetItemRect( 10, & rc_item );
    rc_item.bottom = rc_item.top + ( char_h * 14 );
    if( ! font_size_list.Create( WS_CHILD | WS_VISIBLE | WS_VSCROLL |
        CBS_DROPDOWNLIST, rc_item, this, IDC_FONTSIZE_LIST ) )
        return -1;
    font_size_list.SetFont( & font );
    for( int i = 0; i < DIM; ++ i ){
        tmp.Format( _T( "%d" ), FONTSIZE[ i ] );
        font_size_list.AddString( tmp );
    }

    return 0;
}

解决方案

你可以用MoveWindow等来调整大小。控制到需要的大小

解决方案二:

朋友,我 MoveWindows 了,还是不行,用 GetItemRect( ) 求出来的矩形大小是正确的;

时间: 2024-09-24 02:59:25

windows-MFC 在 ToolBar 上创建 ComboBox 发现大小不符合期望值的相关文章

在windows storage server 2008上创建iscsi磁盘

前言:iscsi磁盘作为群集所需要的一种资源,应用比较广泛,但是iscsi提供者目前一般是由硬件厂商 提供的专用存储设备提供,但是目前的设备一般动辄上万,不是很经济现实,因此目前各种各样的软件 iscsi层出不穷,有开源的openfiler以及微软的storage等,windows storage server 从2003开始就支持 iscsi磁盘,前提是下载iscsi software下载安装后,就有了这么个选项能在storage server上创建iscsi 磁盘, 最近CC做了不少群集的实

在Windows 7/8桌面上创建IE启动图标

  操作方法: 1. 进入系统根目录,预装系统即是C:Program FilesInternet Explorer中,然后直接复制iexplore程序(不是鼠标右键发送到桌面快捷方式),如图: 2.回到桌面后粘贴,此时桌面的iexplore图标即不会带左下角箭头,效果见下图,右边的是与正常发送到桌面快捷方式的图标对比.

MFC里让动态创建的ActiveX控件响应Windows消息

碰到的问题:      我在MFC程序中使用一个由CWnd::CreateControl 创建的WebBrowser控件,这个控件是有CWnd继承下来的,今天我有一个需求是要在当中响应Windows消息去重绘,但是我发现这个控件窗口居然不能够接受父窗口的Windows窗口消息,很是无语. 问题产生的原因:      导致控件无法接收Windows窗口消息的原因是因为CreateControl 没有子类化子窗口,自然是无法响应了.关于子类化的相关资料请查看参考资料,或者自行搜索. 解决的办法:  

Samba 系列(七):在 Samba AD DC 服务器上创建共享目录并映射到 Windows/Linux 客户

需求: 1.在 Ubuntu 系统上使用 Samba4 来创建活动目录架构 2.在 Linux 命令行下管理 Samba4 AD 架构 3.使用 Windows 10 的 RSAT 工具来管理 Samba4 活动目录架构 4.在 Windows 下管理 Samba4 AD 域管制器 DNS 和组策略 5.将另一台 Ubuntu DC 服务器加入到 Samba4 AD DC 实现双域控主机模式 6.使用 Rsync 命令同步两个 Samba4 AD DC 之间的 SysVol 目录 第一步:创建

Windows 2008在IIS7.5上创建独立账号的FTP站点

Windows 2008在IIS7.5上创建独立账号的FTP站点 Windows 2008上的IIS7.5,FTP功能已经非常强大了,完全不下于Serv-U这样的第三方软件.本文洪哥就介绍在IIS7.5上配置独立账号的FTP站点. 1.创建Windows账号 右击点击"我的电脑",选择"管理"打开服务器管理的控制台.展开"服务器管理器",一路展开"配置"."本地用户和组",点"用户"项.

如何在电脑上创建自己的隐私文件夹

  当你看到这篇小技巧教程的时候,我有90%的把握猜你是男生,或者男人.别害羞,有时候咱们男人,有许多自己的"隐私"需要在电脑中保存,但是介于女友或者朋友时常使用自己的电脑,于是咱们的"隐私"无处可藏,这可怎么办呢?别急,让我今天教你如何把自己的"隐私"光明正大的放在文件夹里面,而别人无法打开,只有你自己才知道怎么打开.或许有人问我:是不是给文件夹加密码呀?或者隐藏啊?让我来告诉你,任何人胆敢打开你的隐私文件夹,绝对不会问你密码,也不会问你是不是

在一款D-Link消费级路由器上,我发现了10个严重漏洞

本文讲的是在一款D-Link消费级路由器上,我发现了10个严重漏洞,近期,信息安全研究员皮埃尔·金(Pierre·Kim)公开了D-Link DIR 850L消费级无线路由器存在的10个严重漏洞. 此次公开的D-Link漏洞涉及多方面问题,如缺乏对固件映像的适当保护机制,意味着黑客可以向目标设备注入包含后门的恶意拷贝,以及D-Link私有的mydlink云协议中的漏洞.皮埃尔·金还发现了远程代码执行漏洞.默认密钥,以及DDoS(分布式拒绝服务攻击)风险.其他风险还包括跨站脚本攻击(XSS).明文

在Windows Azure Web Site上为Node.js自动安装NPM包

在我以前的一个文章中,我描述和演示了如何在http://www.aliyun.com/zixun/aggregation/13375.html">Node.js和Windows Azure Web Site (WAWS)使用NPM包.在那篇文章中我使用NPM命令安装软件包,然后使用Git为Windows提交我所做的更改,并且同步它们到WAWSgit 资源库.然后WAWS将触发新的部署托管我的WAWS git 资源库应用程序. 有人可能会注意到,NPM包可能包含多个文件,而且可能有点大.例如

Windows Phone app bar上icon周围有圆圈的设计观点

文章描述:Windows Phone中环绕icon的圆圈. 在Stockholm的Windows Phone Design Day期间的Q&A环节,Stockholm本地的交互设计师Petter Sifver提了一个问题,关于Windows Phone app bar上的icon,想知道为什么icon的周围会有圆圈.Petter友好地在其博客上为分享了他围绕设计阐述的观点. 我们看到的是Button,而不是icon.--从字面上.在这些Button内部都有小icon.微软提供的开箱即用(out-