如何将MFC CFormView放在VS 2008 MFC功能包中引入的CDockablePane中?
我正在使用MFC功能包,我在功能区栏上有一些按钮,CMFCRibbonButton的实例.问题是我想在某些条件下启用和禁用其中一些,但是在运行时.我怎样才能做到这一点?因为没有具体的方法...我听说解决方案是在运行时附加/分离事件处理程序,但我不知道如何...
我正在向类型对象添加属性,CMFCPropertyGridCtrl如下所示:
myPropertyListCtrl.AddProperty(
new CMFCPropertyGridProperty(
_T("Name"),
foo.GetName())
);
Run Code Online (Sandbox Code Playgroud)
结果是只有第二列可见,但不是第一列应该包含"名称".
CMFCPropertyGridCtrl::GetPropertyColumnWidth()但似乎没有相应的Set...方法......NewControls样本,其中列大小似乎是全自动的.但是,我找不到与我的代码相关的差异.我错过了什么?
我有一个源自的课程CTreeCtrl。在OnCreate()我用CToolTipCtrl自定义对象替换默认对象:
int CMyTreeCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CTreeCtrl::OnCreate(lpCreateStruct) == -1)
return -1;
// Replace tool tip with our own which will
// ask us for the text to display with a TTN_NEEDTEXT message
CTooltipManager::CreateToolTip(m_pToolTip, this, AFX_TOOLTIP_TYPE_DEFAULT);
m_pToolTip->AddTool(this, LPSTR_TEXTCALLBACK);
SetToolTips(m_pToolTip);
// Update: Added these two lines, which don't help either
m_pToolTip->Activate(TRUE);
EnableToolTips(TRUE);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我的消息处理程序如下所示:
ON_NOTIFY_EX(TTN_NEEDTEXT, 0, &CMyTreeCtrl::OnTtnNeedText)
Run Code Online (Sandbox Code Playgroud)
但是,我从未收到任何TTN_NEEDTEXT消息。我查看了Spy ++,它看起来也好像从未发送过此消息。
这可能是什么问题?
我不确定这是否相关:CTreeCtrl的父窗口的类型为CDockablePane。可能需要一些额外的工作才能使它正常工作吗?
在Visual C++中创建带子菜单的菜单时,我发现子菜单以箭头开头,我必须单击该箭头才能展开以查看其内容.是否有一种方法(以编程方式)使子菜单弹出已经扩展(没有箭头点击)?
这是我正在谈论的图片,在点击上述箭头之前和之后: 屏幕截图http://www.postimage.org/Pq1qL6rr-94b725163c3880972bb5b7518d00732b.jpg 也在这里
在使用VS2008的doc/view项目中,MFCMenuBar似乎从项目中加载了正确的MENU资源(IDR_MAINFRAME),因为添加和删除菜单项会反映在菜单的UI中.它甚至会将加速器附加到默认菜单项(例如Ctrl + O到Open ...项目).但是,加速器表(IDR_MAINFRAME)似乎没有连接到菜单.将Open ...的默认Ctrl + O更改为Ctrl + 7之类的功能不起作用.Ctrl + O仍然附加到Open ...菜单项,Ctrl + O仍然调用Open ...处理程序.资源文件中只有一个加速器表,所以我不知道CMFCMenuBar在哪里获取其加速器信息.
此时,我已经能够通过手动加载IDR_MAINFRAME加速器表并自己翻译消息来使加速器工作.但CMFCMenuBar仍然附加默认加速器.
谁能解释一下这里发生了什么?如何强制MFCMenuBar使用我的加速器表并且不附加加速器或附加正确的加速器?
我正在使用MFC功能包,我有一个可停靠的属性窗口.如何限制用户在值字段中单独键入任何其他字符,但仅限数字?
谢谢...
仍在适应这个 MFC 百灵鸟,我在这个特定问题上遇到了困难。我正在更新一些旧代码以使用 MFC 功能包中提供的一些更精致的控件。
按照网上给出的更新旧 MFC 应用程序的示例,将应用程序基类更改为 CWinAppEx 效果很好,但是当我将 CFrameWnd 更改为 CFrameWndEx 时,我收到来自 mfc90d.dll!AFXGetRegPath 中某处的“调试断言失败”错误消息。忽略此消息会导致出现大量 0xC0000005:访问冲突错误。
对于如何解决此问题的任何建议,我将不胜感激。
干杯。
我只是尝试了将CToolbar添加到新CMFCToolBar上的对话框的标准方法.但它不起作用.我想深入了解新的实现,我想知道它是否真的可行?
在我的MFC(Feature Pack)应用程序中,可以动态创建停靠窗格以显示图表/表格等.
但是,我不想让用户打开相同的东西两次.
我创建一个像这样的窗格:
// Create CMyDockablePane pPane
pPane->Create(...);
pPane->EnableDocking(CBRS_ALIGN_ANY);
// Create CRect rcPane
pPane->FloatPane(rcPane);
Run Code Online (Sandbox Code Playgroud)
这似乎工作正常.
这就是我尝试检查窗格是否已存在的方法.窗格由其类型(类)和参数标识.
BOOL CanOpenPane(const type_info & paneType, const CMyParameter & parameter) const
{
CMainFrame* pFrm = GetMainFrame();
CDockingManager* pDockMan = pFrm->GetDockingManager();
// Check if there already is a pane of the same type which also has the same parameter.
bool canOpen = true;
CObList panes;
pDockMan->GetPaneList(panes);
POSITION pos = panes.GetHeadPosition();
while (pos)
{
CMyDockablePane* pPane = dynamic_cast<CMyDockablePane*>(panes.GetNext(pos));
if (NULL == pPane) { continue; }
if …Run Code Online (Sandbox Code Playgroud) mfc-feature-pack ×10
c++ ×9
mfc ×7
visual-c++ ×3
accelerator ×1
docking ×1
expand ×1
pane ×1
submenu ×1
tooltip ×1