VC++编程常见问题解答十七 问:工具条状态的问题? 在应用程序中我创建了三个工具条,我想让它们在应用程序启动的时候排成一行 正好在主菜单的下面,我该如何去做? 答:在VC CDs上有一个例子: int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { //other stuff here... EnableDocking(CBRS_ALIGN_ANY); DockControlBar(&m_wndToolBar,AFX_IDW_DOCKBAR_TOP); DockControlBarLeftOf(&m_wndListToolBar,&m_wndToolBar); return 0; } void CMainFrame::DockControlBarLeftOf(CToolBar* Bar,CToolBar* LeftOf) { CRect rect; DWORD dw; UINT n; // get MFC to adjust the dimensions of all docked ToolBars // so that GetWindowRect will be accurate RecalcLayout(); LeftOf->GetWindowRect(&rect); rect.OffsetRect(1,0); dw=LeftOf->GetBarStyle(); n = 0; n = (dw & CBRS_ALIGN_TOP) ? AFX_IDW_DOCKBAR_TOP :n; n = (dw & CBRS_ALIGN_BOTTOM && n==0) ? AFX_IDW_DOCKBAR_BOTTOM :n; n = (dw & CBRS_ALIGN_LEFT && n==0) ? AFX_IDW_DOCKBAR_LEFT :n; n = (dw & CBRS_ALIGN_RIGHT && n==0) ? AFX_IDW_DOCKBAR_RIGHT :n; // When we take the default parameters on rect, DockControlBar will dock // each Toolbar on a seperate line. By calculating a rectangle, we in effect // are simulating a Toolbar being dragged to that location and docked. DockControlBar(Bar,n,&rect); } 问:在SDI应用程序中使用Active控件? 我刚了解到如何在MFC应用程序中使用Active控件,文档上说只能在视图为 CFormView 和CDialog时使用,但要是其它的情况该怎么办呢? 答:你可以在你应用程序的任何地方使用Active控件,而不仅仅局限于CFormView 和CDialog为视图基类的情况.DevStudio通过资源编辑器和对话框模板来使得在上 述两个条件 下使用Active控件更容易.因此,你也可以在任何视图中使用Active控 件,条件是你 直接操纵该控件,创建它并手工的布置好它的位置(这也是DevStudio 为你所做的事). 问:有RichEdit控件的对话框无法正常显示? 我在对话框中放置了一个RichEdit控件,但是对话框却无法正常显示. 答:在你的应用程序InitInstance()中调用了::AfxInitRichEdit()吗? 问:DLL中的模板成员函数? 在一个DLL中,我在自己创建的类中使用了模板成员函数来代替预处理宏.但出现以下错误: error C2664: 'double Dat答::extract(double &)' : cannot convert parameter 1 from 'class CArray ' to 'double &' 为什么在匹配模板定义时它要寻找一个DOUBLE参数? 答:我觉得你可能是在表达成员函数(内联)时出现了问题,请参照下面的示例: class AFX_EXT_CLASS Data : public CObject //This is not a template { public: Data(); Data(BYTE * buffer,int size); template Data(const CArray & array); template CArray & extract(CArray & array) { CArchive ar(&buffer, CArchive::store); ar >> array; }; double extract(double&); (...) private: CMemFile buffer; }