关于XTToolkitPro中DialogPanes无法响应OnDockingPaneNotify事件的解决办法。
由于项目需要用到Xtreme ToolkitPro 2008 Vol 2 (12.1.1)中的Pane,即类似IDE里的面板。
看了套件自带的DialogPanes实例,于是自己建立一个对话框的工程进行测试,但发现就是创建不出来。
开发环境:WindowsXP + VC6 + Xtreme ToolkitPro 2008 Vol 2 (12.1.1)
出现问题:
在对话框的OnInitDialog事件中建立pane,但是系统不调用 OnDockingPaneNotify 事件,界面上也不显示面板。
搜索了下网络,其中一个有价值的帖子是说由于建立面板的ID号与程序中的菜单ID重复,而又有响应菜单的OnCommand函数,所以
不调用OnDockingPaneNotify,更改ID号后解决。
但我自己检查了后发现我的ID并没有重复,所以排除了,仔细查看组件自带的例子,发现它死活就是能出来,而我的就是不行。。。
最后又建立了一个工程,照着一份份代码粘贴,发现我的工程一摸一样,就是少了个OnSize事件。
后来也添加了该事件,把例子的代码复制过去竟然OK了。最后才发现界面必须有OnSize事件响应,
而且在事件里必须有下列代码:
void CPaneDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
// 必须有下列代码
RepositionBars(0, 0xffff, AFX_IDW_PANE_FIRST, 0, 0, &rcClient);
RepositionBars(0, 0xffff, AFX_IDW_PANE_FIRST, reposQuery, &rcClient, &rcClient);
}
症结:OnSize事件中重新定位各个控制条,此时才会触发OnDockingPaneNotify事件。