如 果 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 (