[分享]总结:VC小知识![11]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 seuu 的 blog

如 果 zipcode 列 被 定 义 为 字 符 串 时 不 会 出 现 问 题,如 果 定 义 为 long,则 会 出 现“internal application error”对 话 框,这 是 由 于 类 型 不 匹 配 的 缘 故。如 果 你 删 除 27111 的 单 引 号,则 不 会 出 现 问 题。当 你 看 到“internal application error”时,最 好 检 查 一 下 试 图 要 发 送 给 数 据 库 的 sql 语 句。

(97)   我用classwizard建立了一个类。但是,我把名字取错了,我想把它从项目中删除,应该如何做?

在 classwizard 对 话 框 关 闭 后,用 文 件 管 理 器 删 除 新 类 的 h 和 cpp 文 件。然 后 打 开 classwizard,它 会 提 示 丢 失 了 两 个 文 件,并 询 问 你 该 如 何 做。你 可 以 选 择 从 项 目 中 删 除 这 两 个 问 的 按 钮。

(98)     当我打开应用程序中的窗口时,我要传递该窗口的矩形尺寸。该矩形指定了窗口的外围大小,但是当我调用getclientrect时,所得到的尺寸要比所希望的值要小(因为工具栏和窗口边框的缘故)。有其它方法来计算窗口的尺寸吗?

参 见 cwnd::calcwindowrect。

(99)   我在文档类中设置了一个整型变量。但是,当我试图把该变量写入serialize函数中的archive文件中时,出现了类型错误。而文档中的其它变量没有问题。为什么?

archive 类 只 重 载 某 些 类 型 的 >> 和 << 操 作 符。“int”类 型 没 有 在 其 中,也 许 是 因 为 int 变 量 在 windows 3.1 与 windows nt/95 有 所 不 同 的 缘 故 吧。“long”类 型 得 到 了 支 持,所 以 你 可 以 把 int 类 型 改 成 long 型。参 见 mfc 帮 助 文 件 中 carchive 类。


(100)  如何控制菜单的大小?
我用mfc的cmenu生成了一个动态菜单(例如file,edit,view...help), 我想控制这个菜单的大小(长+高).

方法一:查找 wm_measureitem 和 measureitemstruct.
方法二:查询系统::getsystemmetric(sm_cxmenusize).

     /* 你可以通过如下代码来获得文本的大小:
        (a)获得被使用的字体 */

       nonclientmetrics ncm;
     hfont hfontmenu;
     size size;
     size.cy = size.cy = 0;

     memset(&ncm, 0, sizeof(nonclientmetrics));
     ncm.cbsize = sizeof(nonclientmetrics);
     if (systemparametersinfo(spi_getnonclientmetrics, sizeof(nonclientmetrics), &ncm, 0))
     {
          hfontmenu = createfontindirect(&ncm.lfmenufont);
          /*
          (b) 获得菜单项的文本: */
          char sztext[_max_path];

          pmenu->getmenustring(0, sztext, _max_path, mf_byposition);
          /*
          然后,获得菜单项文本的高度: */
          hfont hfontold;
          hdc hdc;

          hdc = ::getdc(null);
          hfontold = (hfont) ::selectobject(hdc, hfontmenu);
          gettextextentpoint32(hdc, sztext, lstrlen(sztext), &size);
          selectobject(hdc, hfontold);
          ::releasedc(null, hdc);
     }
     /*此时,size.cy即为高度,size.cx为宽度,你可以给菜单加上自定义的高度和宽度,通过比较,我发现宽度为4

比较合适。*/


(101)  改变lvis_selected的状态颜色?
我想将clistctrl项和ctreectrl项在lvis_selected状态时的颜色变灰.

方法一:查找函数customdraw,它是ie4提供的公共控制,允许有你自己的代码.
方法二:生成一个draw控件,然后在drawitem中处理文本颜色.

(102)   如何只存储文档的某一部分?
我只想存储文档的某一部分,能否象使用文件一样使用文档?(也就是有定位函数).将每个carchive类设置为cfile类的派生类,这样你就能使用seek等成员函数.

(103)   保存工具条菜单有bug吗?

使用浮动菜单条时,savebarstate和loadbarstate出现了问题.如果菜单是浮动的,重起应用程序时它会出现在左上角,而它固定在屏幕其它位置时,下一次启动就会出现在该位置,这是什么原因?你试试这个ptoolbar->create(this,...,id_mytoolbar);
你的工具条需要包括id,而不是象默认的工具条那样.

(104)   tip of the day的bug

我创建了一个简单的mdi应用程序,使用.bsf(自定义的文档扩展名)作为它的文档我保存一个foo.bsf文档后,可以在资源管理器中双击该文件打开mdi应用程序同时打开foo.bsf文档.但当我给mdi应用程序加上a tip of the day组件之后,从资源管理器中双击foo.bsf后,就会给我一个警告:assert(::iswindow(m_hwnd)),然后mdi应用程序就死那了.

当从dde启动应用程序(例如:双击相关文档)时,"tip of the day"是有bug的.你可以看看函数"showtipatstartup",它在"initinstance"中调用,可以看到tip of the day作为一个模式对话框显示,在处理其它消息时它一直进行消息循环你可心修改showtipatstartup使其从dde启动时不出现tip of the day.
void ctipofapp::showtipatstartup(void)
        {
                // cg: this function added by 'tip of the day' component.

                ccommandlineinfo cmdinfo;
                parsecommandline(cmdinfo);

                if (

本文关键:[分享]总结:VC小知识!
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top