C++ 如何获取指向颜色按钮的指针
我在工具栏上有一个颜色按钮,它是在CMInframe中创建的,如何从视图中获取指向CMFCColorMenuButton派生类的颜色按钮的指针,如下面的代码(MSOffice2007Demo示例的一部分)?:C++ 如何获取指向颜色按钮的指针,c++,mfc,color-picker,C++,Mfc,Color Picker,我在工具栏上有一个颜色按钮,它是在CMInframe中创建的,如何从视图中获取指向CMFCColorMenuButton派生类的颜色按钮的指针,如下面的代码(MSOffice2007Demo示例的一部分)?: 访问工具栏中的按钮控件的过程需要许多步骤才能导航到相关控件。以下列表说明了这一点: 获取指向承载工具栏的框架窗口的指针 获取指向工具栏控件的指针 [可选]获取特定命令ID的按钮索引 获取指向指定索引处按钮的指针 将基类按钮类型转换为派生类 // Get pointer to mainfra
访问工具栏中的按钮控件的过程需要许多步骤才能导航到相关控件。以下列表说明了这一点:
// Get pointer to mainframe window
CMainFrame* pFrameWnd = DYNAMIC_DOWNCAST( CMainFrame, AfxGetMainWnd() );
// Get pointer to the toolbar
CBasePane* pPane = pFrameWnd->GetPane( AFX_IDW_TOOLBAR );
CMFCToolBar* pToolBar = DYNAMIC_DOWNCAST( CMFCToolBar, pPane );
// Find button index for command ID
int index = pToolBar->CommandToIndex( ID_COLOR_PICKER );
// Retrieve button
CMFCToolBarButton* pButton = pToolBar->GetButton( index );
// Convert button to appropriate type
CMFCColorMenuButton* pColorButton = DYNAMIC_DOWNCAST( CMFCColorMenuButton,
pButton );
动态\u向下广播时
返回值可以是NULL
,必须进行检查。同样,调用CommandToIndex
可能会失败,并需要错误处理
<> >代码>动态>下拉>代码>类似于C++ <代码> DyrimCysCase<代码>,它评估运行时类型是否可以转换为另一种类型。虽然并非所有的Windows控件关系都可以被建模为C++类层次结构,但是MFC提供了自己的转换工具:<代码> DycICIO-LASCAST
传递给调用
CommandToIndex
的ID是通过资源脚本或在运行时分配给CMFCColorMenuButton
的命令ID,具体取决于控件的创建方式。您提出了两个问题。标题中的问题在您发布的代码中得到了回答。第二个问题,如何使用指针,是相当不具体的。这是一个指针。您可以像C/C++中的任何其他指针一样使用它。在MSOffice2007Demo示例中,其应用程序具有功能区栏,因此您可以通过GetRibbonBar()获取CMFCRibbonColorButton,但我的测试应用程序将其作为工具栏按钮,它派生自CMFCColorMenuButton类,因此我无法使用FindByID()获取指向CMFCColorMenuButton的指针,我的问题是,如何通过使用DYNAMIC_DOWNCAST函数或任何想法,plz获得指向工具栏上CMFCColorMenuButton的指针@很抱歉,让你误会了。从通读开始。步骤相同:获取指向您的CMainFrame
的指针,调用以获取工具栏并使用以检索按钮的ID。您已准备好执行最终查找。最重要的是:先学习Windows API,否则您的MFC冒险将不会成功/*错误C2440:“正在初始化”:无法从“CControlBar”转换为“CMFCToolBar*”*/…但如果我将代码更改为“CControlBar*pToolbar=…相同的代码…”,则下一行将发生错误*/CMFCColorMenuButton*pFontColorBtn=DYNAMIC\u DOWNCAST(CMFCColorMenuButton,pToolbar->GetItemID(ID\u CHAR\u COLOR))/*错误C2039:'GeTimeID:不是'CmCuBar’*的成员/你同时尝试学习Windows API、MFC和C++。你应该考虑退后一步,至少要和他们中的一个一起加快速度,C++最好。这是在这里完成的,只要我能做程序,我会记住这个课程。
// Get pointer to mainframe window
CMainFrame* pFrameWnd = DYNAMIC_DOWNCAST( CMainFrame, AfxGetMainWnd() );
// Get pointer to the toolbar
CBasePane* pPane = pFrameWnd->GetPane( AFX_IDW_TOOLBAR );
CMFCToolBar* pToolBar = DYNAMIC_DOWNCAST( CMFCToolBar, pPane );
// Find button index for command ID
int index = pToolBar->CommandToIndex( ID_COLOR_PICKER );
// Retrieve button
CMFCToolBarButton* pButton = pToolBar->GetButton( index );
// Convert button to appropriate type
CMFCColorMenuButton* pColorButton = DYNAMIC_DOWNCAST( CMFCColorMenuButton,
pButton );