vs2008 MFC 开发问题汇总

1、在自定义工具栏时,发现菜单的标题有问题,于是修改工具栏的标题,发现在工具栏创建后调用SetWindowText()根本不起效果。就好象有自动记忆功能一样。解决:
        Handle WM_NCPAINT message,重绘非客户区,在其中修改标题就可以了。

        2、网上“ 用VS2008 Feature Pack 修改您现有的Visual C++的程序界面 ”有很多,在用以下在CMainFrame::OnCreate()函数的最后部分,添加代码设定当前界面的风格:
      CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOffice2007));
      CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007Luna_Blue);
系统将会出现“Cannot load Style”错误!
       调试了很长时间,才找出原因:
4 #if !defined _AFXDLL
5 TRACE(_T("\r\nImportant: to enable the Office 2007 look in static 
link,\r\n"));
6 TRACE(_T("include afxribbon.rc from the RC file in your 
project.\r\n\r\n"));
7 ASSERT(FALSE);
8 #endif
    需要在方案的RC文件中include afxribbon.rc资源。
      3、问题: 关于vs2008 MFC 类库设计程序界面的问题: 我在"菜单资源"中修改了一些菜单的标题,同时又添加了几个菜单项,但在程序编译运行后我的修改没有起作用,菜单没变化!
    VS2008集成了BCG类库,设计的程序允许用户在运行时动态修改菜单项,所以它每次运行后都会记住上次的菜单项,这样你的修改就不起作用了。要解决这个问题,只需要在运行时选择菜单“View|Toolbars|Customize”,然后在对话框中选择Menu标签,然后点击Reset就可以了。
     4、在VS2008 MFC Feature Pack类库设计程序界面时,修改工具条也会出现无法更新的问题。
    和以上同理,只需要在运行时将自定义工具栏的对话框打开,在其中选择toolbars选项卡,点击Reset All按钮即可实现即时更新。
     5、关于工具条隐藏的问题。
    隐藏工具栏用CFrameWndEx的ShowWindow(SW_HIDE)和ShowPane(FALSE, ...)均可。
    如果程序开始就需要将某个工具条tool隐藏,在OnCreate()中建立工具条后(tool.CreateEx),不能习惯用DockPane(&tool);否则,无论如何这个工具条将会显示你Dock的位置上。
   6、整数转换为字符串,不够前面补0,如3转换为字符串时为"003"。
     CString   str;   
    int   n=3;   
    str.Format("d",n);
    7、 解决在VS2008中“要求源文件和版本匹配......”的问题

   今天在Visual Studio 2008中调试某个程序时遇到一个奇怪问题

   就是在某个源文件中设置的断点老是无效,提示“当前不会命中断点。源代码与原始版本不同”信息

   清理项目、重编项目、重新拷贝原文件都解决不了问题

   1)“工具”,“选项”,“调试”,“要求源文件与原始版本完成匹配”去掉勾。我没有用这种方法,总觉得将勾掉不太安全。

   2)通过重新格式化出问题的源文件亦可以解决,即在VS2005中选择 “编辑”-“高级”-“设置选定内容的格式”。我用这个方法解决,将源文件全部选定,设置格式即可!

  8、oracle10g含有BLOB字段的表用ADO打不开!

   用的是微软的那种oracle连接字符串MSDAORA.1!!   要用oracle的才能正常打开含有blob字段的记录集,即用以下这种:   
  m_pConn->Open(L"Provider=OraOLEDB.Oracle.1;User   ID=pkuwh_za;password=a;Data   Source=223;Persist   Security   Info=False",L"",L"",adOpenUnspecified);

   Oracle   provider   for   OLE   DB   支持BLOB字段,但是对字符数据类型的支持较弱。。比如,如果某个字段为一串的空格的话,读取的时候会出现异常。   
  Microsoft   OLE   DB   Provider   for   Oracle   对字符数据类型的支持很强,不会出现上面说的那种情况,唯一的缺点就是不支持BLOB字段。

  9、客户端使用oracle10g XE,但是在MFC ADO无法使用连接字符建立连接!

  我使用的连接字符串为“Provider=OraOLEDB.Oracle.1;Data Source=XE;Password=****;User ID=sys;Persist Security Info=True”,呵呵,明眼人可能发现我使用的用户名为sys,在网上一阵查找,才知道oracle在程序中是不能用system,sysdba用户连接数据库的。在oracle XE中新建一相应权限的用户,建立连接即可。

 10、用PL/SQL进行oracle的备份与恢复很方便。菜单->Tools->export objects即可将需要的各种对象(表、视图、包等)保存。在需要恢复时,只需菜单->Tools->import objects即可。不过我第一次在备份后进行恢复时,没有成功。后来发现,我在备份时,连所属系统的表、视图等一起备份了,在恢复时,是肯定不成功的。在备份时应该用菜单->Tools->export user objects。

 11、很长时间没有用Win32 console了,用CL.exe时竞出现了“缺少mspdb80.dll.....”的错误!

   在PATH环境变量中添加“C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE”即可。

 12、CVSListBox控件很好,失去焦点并切换切换有如下规律:

1、在任意item之间切换(包括删除、移动),先是失去焦点,即iRow=-1;然后再切换成对应Item;
2、如果使用Browse按钮,在程序中弹出对话框,则控件失去焦点,即iRow=-1;
3、失去焦点并切换是在OnAfterMoveItemDown之前发生,所以必须在移动后重新定位并显示内容。
4、失去焦点并切换是在OnBeforeRemoveItem之后发生,所以必须设置当前的删除状态为真,确保在切换为-1时,不触动保存。

13、从Oracle、SQLServer中取得注释:

最近在研究根据表结构生成Java文件的工具,在取得表的字段时如何取得表的各种信息和注释,这个问题困扰了我,经多方搜寻找到如下资料备用: oracle: user_tab_comments;表注释 user_col_comments;表字段注释 以上两个只能获取自己用户的表的注释信息,如果要访问自己能够访问的其他用户的表,则需要使用: all_tab_comments;表注释 all_col_comments;表字段注释 当然,如果有DBA权限,则可以使用 dba_tab_comments;表注释 dba_col_comments;表字段注释 dba*和all*最好指定owner条件。

补充:

1、关于vs 2008 中MFC 的xp风格问题

stdafx.h添加如下试试:

引用:
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")


MSN空间完美搬家到新浪博客!

你可能感兴趣的:(vs2008 MFC 开发问题汇总)