在OCX中嵌套了VSPrint7.ocx,在IE中显示不出来?
用
http://www.codeguru.com/Cpp/COM-Tech/activex/controls/article.php/c2615/
的方法创建的OCX,不放VSPrint是没问题的。就是一放上去,在IE或者ActiveX Control Test Container里引导出来就报错,调试发现是
void CWnd::MoveWindow(int x, int y, int nWidth, int nHeight, BOOL bRepaint)
{
ASSERT(::IsWindow(m_hWnd));
……
}
报错说m_hWnd有问题。
请问如何解决?谢谢!
问题点数:85、回复次数:12Top
1 楼firmbird(firmbird)回复于 2006-03-08 16:01:09 得分 5
ocx是不是有窗体的啊?Top
2 楼laiyiling(陌生人[MVP])回复于 2006-03-08 16:31:38 得分 75
MoveWindow前先判断m_hWnd
http://topic.csdn.net/t/20050324/23/3879276.htmlTop
3 楼sigui(全世界软硬件,统一起来!)回复于 2006-03-08 17:25:52 得分 0
看来应该是框架的问题,我学学先。
只要没有嵌套ocx,怎么搞都是对的……Top
4 楼sigui(全世界软硬件,统一起来!)回复于 2006-03-09 08:50:57 得分 0
firmbird,VSPrint本身是一个打印控件,我创建了一个窗体(CDialog)来放它。我需要显示这个控件并且在界面上操作。Top
5 楼firmbird(firmbird)回复于 2006-03-09 09:56:39 得分 0
我是指控件的m_bWindowOnly有没有设置成trueTop
6 楼sigui(全世界软硬件,统一起来!)回复于 2006-03-09 11:16:51 得分 0
我太弱了……;(
firmbird,我刚学VC,用的是vc6,我没有找到m_bWindowOnly在哪里……
是不是我要换个版本?看了laiyiling给的那个网址,感觉vc6对atl的支持也是很弱的。Top
7 楼sigui(全世界软硬件,统一起来!)回复于 2006-03-09 11:57:14 得分 0
我只要不把VSPrint7这个控件放在窗体上,m_hWnd就不是NULL,只要放上,就肯定为NULL……Top
8 楼softwaiter(softwaiter)回复于 2006-03-09 12:50:49 得分 0
好像需要把vsprint7.ocx放到系统目录中进行注册才可以,可以试一下(因为没有注册的原因);不知道对不对Top
9 楼sigui(全世界软硬件,统一起来!)回复于 2006-03-09 15:40:43 得分 0
softwaiter(软件侍者) :vsprint7.ocx是一个安装版,自动注册过的,可以在资源视图里直接拖到窗体里的。Top
10 楼softwaiter(softwaiter)回复于 2006-03-10 13:11:22 得分 5
奥,也许吧,不过我说的注册是指正版注册,因为不是正版的话在运行时好像会检测组件的位置,如果不在系统目录中,就不能正常使用,很久以前遇到过,不知道记得对不对Top
11 楼sigui(全世界软硬件,统一起来!)回复于 2006-03-13 17:24:50 得分 0
问题还是没有解决,把VSPrint直接放到IE里面倒是可以,但是外围函数全部要用jsp来写有点恐怖……
把VSPrint控件加到项目里面的时候,它自己倒是提供了Create()函数,如果是正常的exe程序,可能不知道在哪里就给初始化了;在ocx里,好像没有这一过程……
继续试验……Top
12 楼sigui(全世界软硬件,统一起来!)回复于 2006-03-14 15:36:06 得分 0
用VC8的ATL复合控件搞定。结贴。Top




