北京速实简石油科技开发有限公司
首页 公司简介 软件产品 应用案例 代理产品 留言板 联系我们
用精湛的技术提供100分的服务!
 

·VC 6.0 对 VC 5.0 的兼容性?

  很不幸,vc 6.0 在调试模式对 vc 5.0 不兼容,但发行模式没有问题。原因在微软改变了调试模式所用 dll 的格式,而保留了原文件名。因此,不要在 vc 6.0 中打开 vc 5.0 的调试版本工程。


  ·打印和打印机的问题?

  我碰到这么一个问题:在打印方法中使用了 MM_LOMETRIC 模式,在 LOGFONT 结构中改变了字体的大小,但不知道 173(或者对于屏幕而言是 25)是从哪来的,它是自动的。然而当我用另外一个打印机时 173 并不适合。我想知道的是:我如何对所有的打印来调整这个数字。
  我以前也碰到过类似的问题,我让用户改变字体(大小,颜色等)。这些改变在屏幕上看起来挺好,但是打印时太小(我的同事在程序包中加入一个放大类)。原因非常简单:打印机的分辨率可能是 300 dpi,而屏幕的分辨率则低得多。我是这么解决的:在获得屏幕字体信息后,我获取屏幕字体的毫米级大小(使用 LPtoDP,然后将模式变为 MM_LOMETRIC,调用 DPtoLP),接着对打印机设定了相同的模式,再调用 LPtoDP。切换回原来的模式之后,我调用了 DPtoLP,这样就得到了想要的字体高度和宽度。在 LOGFONT 中使用这个值,并且带有其它诸如下划线,斜体等字体信息,我实现了用户的要求。


  ·CRichEditCtrl 滚动条的问题?

  我使用了 CRichEditCtrl 控制来显示某个文件中的数据(将该控制设置为只读)。我已经设置了 ES_MULTILINE/ES_AUTOVSCROLL,但当数据内容比控制显示多的时候,滚动条并不出现,是不是因为设置了只读属性而引起了其它的问题?  ES_AUTOVSCROLL/ES_AUTOHSCROLL 属性只在控制是可编辑时有效。你可心使用下面的滚动条风格来使滚动条出现:WS_VSCROLL/WS_HSCROLL,但是这样一来,不管你的数据量有多大,滚动条总是会出现。


  ·如何获得 CRichEditCtrl 中字符的位置?

  我想在 CRichEditCtrl 中使用右键菜单,因此想判定光标处字符的位置,请指点。
  查看如下的帮助:
  IRichEditOleCallback::GetContextMenu
  EM_SETOLECALLBACK


  ·如何限制 mdi 子框架最大化时的大小?

  用 ptMaxTrackSize 代替 prMaxSize,如下所示:
void CChildFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
{
// TODO: Add your message handler code here and/or call default
CChildFrame::OnGetMinMaxInfo(lpMMI);
lpMMI->ptMaxTrackSize.x = 300;
lpMMI->ptMaxTrackSize.y = 400;
}
---

  ·改变列表控制时发生闪烁现象?

  我创建了一个简单的对话框,在对话框中设置了一个列表控件,这个控件占用了对话框的全部客户区。对话框是可以改变大小的,因此我要保证列表控件在对话框中维持正确的位置,在对话框的 ONSize() 事件中我对列表控件使用了 MoveWindow(),这起到了作用,但当用户改变对话框的大小时,列表控件不停地闪烁。
  要解决这个问题,在用 MoveWindow 之前,先用 ShowWindow(SW_HIDE) 隐藏列表控件,然后在 MoveWindow 之后用 ShowWindow(SW_SHOW) 来显示列表控件。


  ·处理列表控件可见项的问题?

  我在一个列表控件中加入了好多条目。我通过获取某个条目是否可见或最后是哪个条目来进行处理,我看了 CListCtrl::GetItem() 的帮助,但是没有找到如何判断一个条目是否可见的方法。
  如果你只想处理可见的条目,你可以用 GetTopIndex,它返回最大可见条目的索引值,然后你再用 GetCountPerPage 来得到在可见区域的条目数。


  ·CFile 使用了缓冲区吗?

  CFile 没有使用运行库的 I/O 缓冲例程,从这个意义上讲 CFile 并没有使用缓冲。但是有可能操作系统在处理文件时使用了缓冲区,如果你完全不需要缓冲区,你可以设置 FILE_FLAG_NO_BUFFERING。 CFile 工作在这种模式下的唯一的方法是 CFile::Attach()。
---

 ·关于用户自定义的消息使用?

  我写了一个基于 MFC 应用程序的对话框,在这个程序中,我创建了等待网络传输数据的线程,一旦该线程接收到数据,它就传送一个用户自定义的消息到对话框,使对话框知道有数据过来。但是为何在 CMyDialog::PreTranslateMessage(MSG* pMsg) 中能捕捉到 WM_MYCMD 这个消息,却不能和 OnMyCommand 相映射?
  将你所有自定义消息的基类设为 WM_APP,而不是 WM_USER。


  ·在打开一个文档时退出?

  我有一个 mdi 程序,在打开文件的处理过程中,我想判断该文档是不是应用程序需要处理的文档,因此,我检测文档中的某个数字是否符合要求,如何在发现不是该文档时出现一个错误提示,然后不打开该文档?
  给文档设定某个标志,如果文档不是所要的就设定它。然后 OnOpenDocument 中检测,当发现标志被设定后返回 FALSE。


  ·在 CListCtrl 控件中多选择项的删除?

  如何从在 CListCtrl 中删除多个选择项?
  按如下方法处理:如果你的在 CListCtrl 是 m_list,to_delete 是个整数数组。

i=3D0;
POSITION pos=3Dm_list.GetFirstSelectedItemPosition();
if(pos)
while(pos)
to_delete[i++]=3Dm_list.GetNextSelectedItem(pos);

  然后用删除保存在 to_delete 中的项目,用 GetSelectedCount 来得到已选项的个数。


  ·如何创建一个动态的 Tree 控件?

  我想创建一个动态的 tree 控件,就象弹出窗口一样,但它并不象想象中那么容易。
  方法一:用 CreateWindow(SDK)创建风格为 WS_POPUP,WS_CAPTION 和 WS_TICKFRAME 的窗口,并作为父窗口。
  方法二:创建一个包含 Tree 控件的对话框。


  ·SDI 程序开始时不打开文档?

  我创建了一个 SDI 应用,但每次启动时它都会打开一个文档("untitled"),如何不让它打开该文档呢?
  看看 InitInstance 函数中有没有关于 OnFileNew 的调用,去掉它即可。
---

  ·在 SDI 应用程序中使用 Active 控件?

  我刚了解到如何在 MFC 应用程序中使用 Active 控件,文档上说只能在视图为 CFormView 和 CDialog 时使用,但要是其它的情况该怎么办呢?
  你可以在你应用程序的任何地方使用 Active 控件,而不仅仅局限于 CFormView 和 CDialog 为视图基类的情况。DevStudio 通过资源编辑器和对话框模板来使得在上述两个条件下使用 Active 控件更容易。因此,你也可以在任何视图中使用 Active 控件,条件是你直接操纵该控件,创建它并手工的布置好它的位置(这也是 DevStudio 为你所做的事)。


  ·有 RichEdit 控件的对话框无法正常显示?

  我在对话框中放置了一个 RichEdit 控件,但是对话框却无法正常显示。
  在你的应用程序 InitInstance() 中调用了 ::AfxInitRichEdit() 吗?


  ·CArchive 类的 WriteObject 函数问题?

  谁知道在使用 CArchive 类的 WriteObject 函数时,如何避免将类名写入文件吗?
  WriteObject 函数不仅写入了类名,而且还写入 PID(请查看 TN02),如果你只想写进一个文
本文件,并且你也想用串行化,你可以使用文件指针(用 GetFile)来存储字符串。或者,你可以使用
CFILE 类来处理这个问题,如果是文本文件,你也可以用 CStdioFile 类。

 
北京速实简石油科技开发有限公司