VC++编程俱乐部
问题1:在VC++5.0中创建对话框资源时发现工程中不能使用中文,请问如何才能在应用程序中使用中文?
答:在VC++6.0中安装程序会自动检测Windows系统的语言环境,并安装相应语言的资源和库文件,所以不存在这个问题。但是在VC++5.0中就不是这样,碰到这种问题时须要将安装盘上\DEVSTUDIO\SHAREDIDE\BIN\IDE目录下的Appwzchs.dll文件拷贝到硬盘上VC++5.0安装目录下的相同目录中,这个文件是MFC AppWizard自动创建工程时要使用的中文资源文件。这样,创建一个新工程时就可以在MFC AppWizard - Step 1对话框中选择所需要的中文资源选项了。
问题2:我想编写一些DOS小程序用来验证某些函数的执行结果,在VC++中如何编写DOS控制台程序?
答:在VC++集成开发环境中关闭当前所有的工程,然后在菜单中选择“File/New...”,出现New对话框。选中“Files”标签,选择“C++ Source File”条目,输入源程序名和Location项,单击“OK”按钮,可在新建源文件的编辑窗口中输入DOS控制台的程序代码。然后通过菜单“Build/Build”进行编译和链接,系统会弹出一个对话框,询问是否创建一个默认的工程。单击“是”按钮,系统将为当前文件自动建立一个工程,默认生成的应用程序为DOS应用程序,编译和链接通过后就可以运行该DOS控制台程序了。
问题3:请问在程序代码的层次比较复杂或函数中的语句嵌套比较多的时候,怎样检测程序中的括号是否匹配?
答:VC++集成开发环境提供了一个热键,可以很方便地检测括号是否匹配。只要把光标移动到需要检测的括号(如大括号{}、方括号[]、圆括号()和尖括号<>)前面,键入快捷键“Ctrl+]”。如果括号匹配正确,光标就跳到匹配的括号处,否则光标不移动,并且机箱喇叭还会发出一声警告声。
问题4:如何在VC++的程序中编程控制窗口的位置(比如移动窗口)?
答:在应用程序程序中如果要控制窗口的位置,可调用CWnd::SetWindowPos()函数来移动窗口,注意要指定SWP_NOSIZE标志,而且这时目标位置与父窗口的位置有关(顶层窗口则与屏幕有关)。如下面的代码可将窗口移到相对父窗口(100,100)的位置:
SetWindowPos(NULL, 100, 100, 0,0, SWP_NOSIZE|SWP_NOZORDER);
另外也可以使用CWnd::MoveWindow()函数,但这个函数须要指定窗口的大小。
问题5:我在开发多媒体程序时,想自己创建带位图图案的按钮。请问如何在VC++中制作这种位图按钮?
答:先在对话框中放置一个按钮控件,选中其属性框的Styles标签中的Bitmap复选框。通过ClassWizard定义与该按钮控件相关联的CButton类的对象变量,如m_BitmapButton。创建位图资源,设置标识号如IDB_BITMAPBUTTON。然后在对话框的初始化函数中加入如下代码就可以了:
// TODO: Add extra Initialization here
HBITMAP hBitmap=::LoadBitmap(AfxGetInstanceHandle(),
MAKEINTRESOURCE(IDB_BITMAPBUTTON);
m_BitmapButton.SetBitmap(hBitmap);
问题6:要在MDI应用程序中同时打开了多个文档进行浏览和编辑,不知如何获得当前文档和当前视图的指针?
答:MDI应用程序中要取得当前文档和当前视图的指针,可以调用函数GetActiveDocument()和GetActiveView()来实现。如:
((CFrameWnd*)AfxGetApp()->m_pMainWnd))->GetActiveDocument();
((CFrameWnd*)AfxGetApp()->m_pMainWnd))->GetActiveView();
问题7:在MDI应用程序中需要同时打开多个视图来绘制不同的曲线图,请问如何循环浏览所有已经打开的视图?
答:使用CDocument的GetFirstViewPosition函数可以取得第一个视图的位置,然后调用GetNextView函数取得下一个视图的指针。这两个函数相互配合,就能循环浏览所有的视图了。下面的示例代码将循环刷新每一个视图:
POSITION pos = GetFirstViewPosition(); // 取得第一个视图的位置
while (pos != NULL) // 如果视图有效,则继续查找下一个视图
{
CView* pView = GetNextView(pos); // 取得下一个视图
pView->UpdateWindow(); // 更新视图窗口
}
问题8:我在VC++6.0中使用标准文件打开对话框来选择打开文件,请问如何能实现Windows3.1式样的通用对话框?
答:在Windows95/98系统中,标准文件打开对话框采用的是Explorer的版本。如果要使用Windows3.1式样的文件打开对话框,可以设置对话框变量对象的成员m_ofn取消OFN_EXPLORER标志位来实现,如下代码:
CFileDialog m_OpenDlg(TRUE);
m_OpenDlg.m_ofn.Flags&=~OFN_EXPLORER;
m_OpenDlg.DoModal();