VC中调用ocx控件时遇到问题,牛人帮忙!!
将控件导入工程,自动生成一个类,
这各类已经将原控件的属性封装出set..()与get..()函数,
但无法正常调用!!!
编译可以通过,但运行时不行, 报错是Debug Assertion Failed! 出错地方不在当前工程中,叫一个
winocc.cpp的系统文件中,不只是那里的问题???
第一次问,大家帮啊………… 等!
问题点数:66、回复次数:16Top
1 楼syy64(太平洋)回复于 2006-08-10 16:17:46 得分 0
你调试看看是哪一句引起的?Top
2 楼palmax(用上VS2005了)回复于 2006-08-10 16:59:24 得分 0
CxxxApp::InitInstance()
{
AfxEnableControlContainer();
}Top
3 楼wanghaha(@#$)回复于 2006-08-11 09:20:14 得分 0
错误就出在调用自动生成的类的方法时,
具体一点 自制一个card控件里面属性(如name,number)、方法(make,read)若干,
置入MFC工程后,自动生成CCard类,该类把属性全部封装只提供Set与Get方法,该类无构造方法(这一点也有小小疑惑-〉无法生成对象)
所以直接用CCard::SetName 调用,编译没问题(若是CCard::SetName(“xxx”) 则编译都过不了),在运行就出前面提到的错误。。。
楼上的
CxxxApp::InitInstance()
{
AfxEnableControlContainer();
}
原来就有……
再等!Top
4 楼palmax(用上VS2005了)回复于 2006-08-11 09:40:05 得分 8
生成ccard类的话,应该用create方法的吧,只要它是从cwnd类派生的,肯定有,即使ccard类里没显示Top
5 楼wanghaha(@#$)回复于 2006-08-11 09:47:55 得分 0
恩对 生成有creat方法如下
BOOL Create(LPCTSTR lpszWindowName, DWORD dwStyle,
const RECT& rect, CWnd* pParentWnd, UINT nID,
CFile* pPersist = NULL, BOOL bStorage = FALSE,
BSTR bstrLicKey = NULL)
{ return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID,
pPersist, bStorage, bstrLicKey); }
不会使 :(
以前用Java建这么多参数晕
可以给些办吗? 怎么去creat 再调用方法
Top
6 楼ssbelle(沉默的骆驼)回复于 2006-08-11 09:55:38 得分 0
CRect rect(10,10,20,20);
INT nID = 0;
ocxitem->Create("",WS_CHILD|WS_VISIBLE,rect,this,nID);Top
7 楼wanghaha(@#$)回复于 2006-08-11 10:05:03 得分 0
try\MakeCard.cpp(62) : error C2065: 'ocxitem' : undeclared identifier
MakeCard.cpp(62) : error C2227: left of '->Create' must point to class/struct/union
Error executing cl.exe.
稍微再系统点中不?
现在有点蒙, 即便编译通过 如何调用对象的方法
期待中……Top
8 楼syy64(太平洋)回复于 2006-08-11 10:18:30 得分 23
void CCity3dctl1View::OnInitialUpdate()
{
CView::OnInitialUpdate();
// TODO: Add your specialized code here and/or call the base class
// ³õʼ»¯¿Ø¼þ
int iret;
RECT rect;
CCity3dctl1Doc* pDoc;
pDoc = GetDocument();
pDoc->SetTitle("ÕæÈýάµØÀíÐÅϢϵͳ£¨ä¯ÀÀ°æ£©");
GetClientRect(&rect);
iret = m_Show3dctl.CreateControl(m_Show3dctl.GetClsid(), NULL, WS_CHILD|WS_VISIBLE|WS_HSCROLL|WS_VSCROLL, rect, this, ID_SHOW3DCTL);
/// iret = m_Show3dctl.CreateControl(m_Show3dctl.GetClsid(), NULL, NULL);
if(iret==0)return;
m_Show3dctl.SetHMainWnd((long)m_hWnd);
m_bDraw = true;
/// m_Show3dctl.SetH.SetHMainDC.SetHMainWnd((long)m_hWnd);
// ÉèÖÃʱ¼äÆ÷
SetTimer(1, 50, 0);
::MessageBox(NULL, "³õʼ»¯Õý³£","Ìáʾ", MB_OK);
}
Top
9 楼wanghaha(@#$)回复于 2006-08-11 10:44:12 得分 0
还是没有吸收太平洋的精华
m_Show3dctl是什么东东,我找不到与之等价的变量啊
这个操作放在视图类中吗
我一直在放ocx的对话框类下的ONOK()响应函数中 进行调用, 不对吗
望指正!!
Top
10 楼syy64(太平洋)回复于 2006-08-11 10:57:26 得分 0
m_Show3dctl是在文档视结构中,插入的我们自己开发的OCX控件的对象。Top
11 楼ssbelle(沉默的骆驼)回复于 2006-08-11 11:18:20 得分 0
try\MakeCard.cpp(62) : error C2065: 'ocxitem' : undeclared identifier
MakeCard.cpp(62) : error C2227: left of '->Create' must point to class/struct/union
Error executing cl.exe.
---------------
你起码也得定义一下吧。。。。Top
12 楼wanghaha(@#$)回复于 2006-08-11 11:23:14 得分 0
能调了 不愧三颗星!
还有个结构上的小问题:
我的调用也写在void CTryView::OnInitialUpdate()
中了,m_card即为m_Show3dctl,
比如调用m_card.AboutBox();运行起来上来先显示帮助对话框,后出窗口
而我需要,在窗口中的一个对话框中调用对象方法
计将安出?
Top
13 楼wanghaha(@#$)回复于 2006-08-11 11:34:46 得分 0
to骆驼:
这么定义的
CCard card1;
CRect rect(10,10,20,20);
INT nID = 0;
CCard->Create("",WS_CHILD|WS_VISIBLE,rect,this,nID);
报错:
error C2143: syntax error : missing ';' before '->'
error C2143: syntax error : missing ';' before '->'
Top
14 楼wanghaha(@#$)回复于 2006-08-11 11:38:31 得分 0
刚写错 :p
to骆驼:
这么定义的
CCard card1;
CRect rect(10,10,20,20);
INT nID = 0;
card1->Create("",WS_CHILD|WS_VISIBLE,rect,this,nID);
报错:
try\MakeCard.cpp(84) : error C2819: type 'CCard' does not have an overloaded member 'operator ->'
: see declaration of 'CCard'
try\MakeCard.cpp(84) : error C2227: left of '->Create' must point to class/struct/union
Error executing cl.exe.Top
15 楼ssbelle(沉默的骆驼)回复于 2006-08-11 12:19:30 得分 35
要是这样定义得card1.Create()
CCard* card1 = new CCard1;
这样才card1->Create()
Top
16 楼wanghaha(@#$)回复于 2006-08-11 12:27:30 得分 0
谢谢骆驼
这是我要的!!!
准备结帖:)Top




