有两个问题:
1,我用Xtreme Tookit 2.0时,使用Outlook风格时,点击左边窗口的Item时,怎么实现右边CFormView窗口的切换?
2,条件同上,我在右边CFormView窗口嵌入ADO控件,(并未实现1的功能,仅一个窗口)连接access数据库正常,但是加入一个Microsoft DataGrid控件时,只要将DataGrid控件绑定ADO控件就运行错误,取消绑定就正常,不知为什么???
1,我用Xtreme Tookit 2.0时,使用Outlook风格时,点击左边窗口的Item时,怎么实现右边CFormView窗口的切换?
2,条件同上,我在右边CFormView窗口嵌入ADO控件,(并未实现1的功能,仅一个窗口)连接access数据库正常,但是加入一个Microsoft DataGrid控件时,只要将DataGrid控件绑定ADO控件就运行错误,取消绑定就正常,不知为什么???
如果是这样,你可以采用控件隐藏技术,最方便,就是只用一个CFormView,其中放置你所需要的所有控件,然后点击不同的Item使相应的控件显示或隐藏,我有一个简单的例子(就是用Xtreme Tookit做的),如果你要的话,给个email,
2。你有没有初始化ado:
你有没有初始化com库:
BOOL CMyApp::InitInstance()
{
AfxOleInit();
.......有没有在stdafx.h中加入:
#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
[email protected]
---------------------------------------------------------------------------------
你计算机中的msado15.dll文件的位置可能不同,到你的计算机中搜索一下msado15.dll,看是在哪个目录下,把上面的语句改正就可以了
不知道楼主可把问题搞定了?
中午给大家发email,稍等,^_^
{
int nBarAction = (int)wParam; // Cast the lParam to a XT_OUTBAR_INFO* struct pointer.
XT_OUTBAR_INFO* pOBInfo = (XT_OUTBAR_INFO*)lParam;
ASSERT(pOBInfo);
switch (nBarAction)
{
case OBN_XT_ITEMCLICK://单击Item事件
switch (pOBInfo->nIndex )
{
case 0://第一个Item
m_wndSplitter1.ReplaceView(0,1,RUNTIME_CLASS(CForm3));
break;
case 1://第二个Item
m_wndSplitter1.ReplaceView(0,1,RUNTIME_CLASS(CForm4));
break;
case 2://第三个Item
m_wndSplitter1.ReplaceView(0,1,RUNTIME_CLASS(CForm5));
break; }但是,新的问题就是:我在右边的CFormView上设置了一个按钮,想要点击此按钮实现右边视图的切换,却无法实现,大虾们有办法吗?,能看看代码吗?
AfxGetMainWnd()->SendMessage(WM_OUTBAR_NOTIFY,index,NULL);
设右边视图为CForm4,上面的按钮为ID_OK,映射ID_OK单击为OnOK()
OnOK()
{CFrameWnd * pFrame = (CFrameWnd*)AfxGetMainWnd();
::PostMessage(pFrame->m_hWnd,WM_USER+101,0,0);
} //向主框架发送消息WM_USER + 101
然后在CMainFrame中处理它:
# define WM_TEMP WM_USER + 101
...
ON_MESSAGE(WM_TEMP,OnCall)
...
afx_msg void OnCall(WPARAM wParam, LPARAM lParam);
...
void CMainFrame::OnCall(WPARAM wParam, LPARAM lParam)
{
m_wndSplitter1.ReplaceView(0,1,RUNTIME_CLASS(CForm5));
//////// CXTSplitterWnd m_wndSplitter1;
}
想要点击ID_OK按钮实现切换到视图CForm5,但是提示错误:
error C2440: 'type cast' : cannot convert from 'void (__thiscall CMainFrame::*)(unsigned int,long)' to 'long (__thiscall CWnd::*)(unsigned int,long)'
Pointers to members have different representations; cannot cast between them
指示ON_MESSAGE(WM_TEMP,OnCall)有误?
是什么原因呢?
{
CFrameWnd * pFrame = (CFrameWnd*)AfxGetMainWnd();
pFrame->SendMessage(WM_TEMP,0, 0);
} //向主框架发送消息WM_USER + 101
然后在CMainFrame中处理它:
# define WM_TEMP WM_USER + 101
...
ON_MESSAGE(WM_TEMP,OnCall)
...
afx_msg long OnCall(WPARAM wParam, LPARAM lParam);
...
void CMainFrame::OnCall(WPARAM wParam, LPARAM lParam)
{
m_wndSplitter1.ReplaceView(0,1,RUNTIME_CLASS(CForm5));
//////// CXTSplitterWnd m_wndSplitter1;
}点击右边的按钮即可实现右边视图的切换,很成功,证明我这个想法可行!
再次谢谢大家的关注!