常见Visual C++开发使用问答

85 篇文章 0 订阅
 ·我应该怎样防止 MFC 在窗口标题栏上添加文档名?

   在 PreCreateWindow 函数中删除 FWS_ADDTOTITLE 标志的窗口样式:
   cs.style &= ~FWS_ADDTOTITLE;


   ·我应该怎样防止 MFC 在窗口标题栏上把文档名预置成应用程序名?

   在 PreCreateWindow 函数中删除 FWS_PREFIXTITLE 标志的窗口样式:
   cs.style &= ~FWS_PREFIXTITLE


   ·我应该如何改变视窗口的大小?

   因为视窗口实际上是框架窗口的子窗口,所以你必须改变框架窗口的大小,而不是改变视窗口。使用 CView 类中的 GetParentFrame() 函数获得指向框架窗口的指针,然后调用 MoveWindow() 函数来改变框架的大小。这会使变尺寸的视充满框架窗口。

   ·我有一无模式对话框。我怎样才能在窗口退出时删除 CDialog 对象?

   把“delete this”加到 PostNcDestroy 中。这主要用在需要自动删除对象的场合。


   ·为什么把“delete this”放在 PostNcDestroy 中而不是 OnNcDestroy?

   OnNcDestroy 只被已建立的窗口调用。如果建立窗口失败(如 PreCreateWindow),则没有窗口处来发送 WM_NCDESTROY 消息。PostNcDestroy 是在对象窗口被完全删除,在 OnNcDestroy 后,甚至在窗口建立失败之后调用的。
---

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

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


   ·改变 LVIS_SELECTED 的状态颜色?

   我想将 CListCtrl 项和 CTreeCtrl 项在 LVIS_SELECTED 状态时的颜色变灰。
   方法一:查找函数 CustomDraw,它是 IE4 提供的公共控制,允许有你自己的代码。
   方法二:生成一个 draw 控件,然后在 DrawItem 中处理文本颜色。


   ·如何只存储文档的某一部分?

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


   ·保存工具条菜单有 bug 吗?

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

   ·我应该怎样防止 MFC 在窗口标题栏上添加文档名?

   在 PreCreateWindow 函数中删除 FWS_ADDTOTITLE 标志的窗口样式:
   cs.style &= ~FWS_ADDTOTITLE;


   ·我应该怎样防止 MFC 在窗口标题栏上把文档名预置成应用程序名?

   在 PreCreateWindow 函数中删除 FWS_PREFIXTITLE 标志的窗口样式:
   cs.style &= ~FWS_PREFIXTITLE


   ·我应该如何改变视窗口的大小?

   因为视窗口实际上是框架窗口的子窗口,所以你必须改变框架窗口的大小,而不是改变视窗口。使用 CView 类中的 GetParentFrame() 函数获得指向框架窗口的指针,然后调用 MoveWindow() 函数来改变框架的大小。这会使变尺寸的视充满框架窗口。

   ·我有一无模式对话框。我怎样才能在窗口退出时删除 CDialog 对象?

   把“delete this”加到 PostNcDestroy 中。这主要用在需要自动删除对象的场合。


   ·为什么把“delete this”放在 PostNcDestroy 中而不是 OnNcDestroy?

   OnNcDestroy 只被已建立的窗口调用。如果建立窗口失败(如 PreCreateWindow),则没有窗口处来发送 WM_NCDESTROY 消息。PostNcDestroy 是在对象窗口被完全删除,在 OnNcDestroy 后,甚至在窗口建立失败之后调用的。
---

  ·File 菜单中的 MRU 列表是从哪儿来的?列表中的名字放在哪儿了?我怎样才能改变列表中项目的最大值?

   在应用程序类的 InitInstance 函数中对 LoadStdProfileSettings 的调用中。该调用接受一个参数(在缺省情况下如果没有传递值则为4)。MRU 文件名是从 INI 文件中调用的。如果你有带有 ID_FILE_MRU_FILE1 的 ID 的菜单选项,它会为调入的 MRU 列表所替换。如果你改变传递给 LoadStdProfileSettings 的数值(最大为 16),则你就改变了所装如文件名的最大值。


   ·我在菜单中添加了新的项。但是,当我选该项时,在状态栏上没有出现任何提示信息。为什么?

   打开资源文件中的菜单模板。打开新菜单选项的属性对话框。在对话框的底部的 Prompt 编辑框中,你可以如下指定状态栏上的提示信息和工具栏上的提示信息(如果你已经建立的工具栏按钮):
   Status bar string Flying tag


   ·我怎样才能在应用程序的缺省系统菜单中加上一些东西?

   系统菜单与其它菜单类似,你可以添加或删除项目,这需要使用 CMenu 类的成员函数。下面的代码在你的系统菜单后面添加一个新菜单项:
   CMenu *sysmenu;
   sysmenu = m_pMainWnd->GetSystemMenu(FALSE);
   sysmenu->AppendMenu(MF_STRING, 1000, "xxx");
参见 MFC 帮助文件中的 CMenu 类。


   ·我怎样才能使一个窗口具有“always on top”特性?

   在调用 OnFileNew 后,在你的 InitInstance 函数中加上下面的代码:
   m_pMainWnd->SetWindowPos(&CWnd::wndTopMost,0,0,0,0,SWP_NOMOVE/SWP_NOSIZE);


   ·我建立了一个对话框。但是当我显示该对话框时,第一个编辑框总是不能获得焦点,我必须单击它来使它获得焦点。我怎样才能使第一个编辑框在对话框打开时就获得焦点?

   打开资源编辑器中的对话框模板。在 Layout 菜单中选择 Tab Order 选项。按你的需求单击对话框中的控制来重新排列这些控制的 tab 顺序。
---

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

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


   ·改变 LVIS_SELECTED 的状态颜色?

   我想将 CListCtrl 项和 CTreeCtrl 项在 LVIS_SELECTED 状态时的颜色变灰。
   方法一:查找函数 CustomDraw,它是 IE4 提供的公共控制,允许有你自己的代码。
   方法二:生成一个 draw 控件,然后在 DrawItem 中处理文本颜色。


   ·如何只存储文档的某一部分?

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


   ·保存工具条菜单有 bug 吗?

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值