Visual C++ 6.0 CDialogBar Create 出错解决方案

今天打算弄一个工具栏,于是设计了一个对话框,然后建立一个 CDialogBar 对象,可是在 Create 的时候老是出错,报错地点如下:

File:bardlg.cpp
Line:48

然后看了一下别人的建立过程,发现别人建立对话框的时候,是直接建立的 IDD_DIALOGBAR 的对话框,于是比较了 IDD_DIALOGBARIDD_DIALOG 的各种参数,发现只要把建立的 IDD_DIALOG 对话框的属性改一下就可以了。

样式:下层;边框:无;
更多样式:取消可见

其他的设置没有测试,默认的对话框按以上设置之后就能当作工具栏使用了。

Visual C++ 6.0 使用心得

Visual C++ 6.0 使用了一段时间了,其中有些东西修改一下能用得更加顺手,于是记录一下。

修改工作空间的图标

打开注册表,定位到 HKEY_CLASSES_ROOT\dswfile\DefaultIcon, 双击默认,然后把 msdev.exe 之后的串删了即可。

新建进程打开项目

直接删除注册表 HKEY_CLASSES_ROOT\dswfile\shell\&Open with MSDev\ddeexec 部分,再次打开 dsw 文件的时候就不会把原来开着的项目给关了。

Windows 7 下添加文件到项

首先下载一个插件 FileTool,然后解压到文件夹 C:\Program Files\Microsoft Visual Studio\Common\MSDev98\AddIns(假设是安装在默认的位置,详情请根据机器调整),然后打开 VC——工具——定制——附加项和宏文件,勾选 FileTool Developer Studio Add-in,这时就会出来一个工具条,就可以通过工具条添加、打开文件了。

VC6 下通过 DirectShow 调用摄像头

首先,我们下载一下 DirectX 的 SDK 开发包,目前我们可以使用的是 DirectX 9.0 SDK(Summer 2004)之后的版本 DirectShow 已经被分离出去了。下载之后安装,安装前最好把 IDE 都给关了,免得路径没有添加进去。

我们开始设计阶段:

我们先通过 MFC AppWizard(exe) 建立一个 MFC 的基本对话框,去除默认的两个按钮和文本,然后我们添加一个图像控件、一个组合框、一个按钮,然后设置属性,详情如下:

然后,我们通过类向导添加成员变量,详情如下:

我们双击 Test按钮,进入代码编写。

首先,我们把摄像头的两个文件加到项目路径下,然后再在文件视图里面添加这两个文件进项目。

然后,我们给窗口类的头文件里面添加引用

#include "CaptureVideo.h"

接着,给窗口类添加一个私有的成员变量

private:
         CCaptureVideo m_cap;

然后再在窗口初始化的时候,初始化设备列表

m_cap.EnumDevices(m_Device.GetSafeHwnd());
m_Device.SetCurSel(0);

然后在按键的时候初始化摄像头就是的

m_cap.Init(m_Device.GetCurSel(),m_Screen.GetSafeHwnd());
m_OK.EnableWindow(FALSE);

我的设计环境为 Windows 7 SP1 、 Visual C++ 6.0 SP6 ,借鉴的别人的程序,如果有其他问题,欢迎一起讨论。
源代码点击下载


关于出现以下错误的解决方案

C:\DXSDK\Include\strmif.h(1018) : error C2146: syntax error : missing ';' before identifier 'HSEMAPHORE'
C:\DXSDK\Include\strmif.h(1018) : fatal error C1004: unexpected end of file found
CapDlg.cpp
C:\DXSDK\Include\strmif.h(1018) : error C2146: syntax error : missing ';' before identifier 'HSEMAPHORE'
C:\DXSDK\Include\strmif.h(1018) : fatal error C1004: unexpected end of file found
CaptureVideo.cpp
C:\DXSDK\Include\strmif.h(1018) : error C2146: syntax error : missing ';' before identifier 'HSEMAPHORE'
C:\DXSDK\Include\strmif.h(1018) : fatal error C1004: unexpected end of file found
Generating Code...
执行 cl.exe 时出错.

在项目的 StdAfx.cpp 里面加上

#include "C:\DXSDK\Include\strmif.h"

编译一次就好了,之后注释掉就好了。

Windows 7 环境下重置图标缓存

图标缓存可以加速图标的显示,但是有时,如果图标发生了改变,但是并没有正常显示时,我们需要重建图标的缓存,把如下代码保存为.cmd 文件运行即可。

rem 关闭 Windows 外壳程序 explorer
taskkill /f /im explorer.exe

rem 清理系统图标缓存数据库
attrib -h -s -r "%userprofile%\AppData\Local\IconCache.db"
del /f "%userprofile%\AppData\Local\IconCache.db"
attrib /s /d -h -s -r "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\*"
del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_32.db"
del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_96.db"
del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_102.db"
del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_256.db"
del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_1024.db"
del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_idx.db"
del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_sr.db"

rem 清理 系统托盘记忆的图标
echo y|reg delete "HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify" /v IconStreams
echo y|reg delete "HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify" /v PastIconsStream

rem 重启 Windows 外壳程序 explorer
start explorer