1将IDCardocx文件放在C盘根目录下,打开visual studio 2005命令提示 工具窗口 如图所示:
输入aximp c:\IDCardoxc 会生两个dll文件----IDCardLibdll、AxIDCardLibdll。
2在程序在添加引用 IDCardLibdll、AxIDCardLibdll。
private void Form1_Load(object sender, EventArgs e)
{
AxIDCardLibAxIDCard idcard = new AxIDCardLibAxIDCard();
((SystemComponentModelISupportInitialize)(idcard))BeginInit();
thisControlsAdd(idcard);
((SystemComponentModelISupportInitialize)(idcard))EndInit();
//下面便可调用IDCard里面的方法了。
}
一如果不能打开,可这样恢复文件关联:
1、开始运行,输入:regsvr32 C:\windows\system32\hhctrlocx ,确定,重新关联文件。
2、执行一下windows目录里的hhexe 。
有时候chm文件放在中文目录就不行。包括中文chm名字。试着把文件考出来中文名字一改
二1在微软网站上下载hhupdexe,安装hhexe后并运行。
2实际上,下载hhupdexe后,运行后就可以了。这个东西大小为461kb 3在c:\windows\system32里找到“Hhctrlocx”文件,然后运行:“regsvr32“c:\windows\system32\hhctrlocx
网上的解决方法不可行,下载不了hhupdexe我直接执行regsvr32 c:\windows\system32\hhctrlocx就ok了。
解决方法2是:
1,右键关联chm文件的“打开方式”到\Windows\HHexe
2,在命令行运行regsvr32 itssdll
3,在命令行运行regsvr32 hhctrlocx
三也许是 HHEXE 所必需的某个组件出了问题。但是不知道 HHEXE 会用到些什么组件,所以上网查了一下,有人建议重新注册 hhctrlocx。我在系统目录下找到了 hhctrlocx,重新注册一下 hhctrlocx 试试:regsvr32 hhctrlocx。依然不能正常阅读 CHM。
既然如此,很有可能是协议出了问题。HHEXE 用的是 ms-its 等协议,这些协议应该是由某个 DLL 文件提供服务的。问题是,是什么 DLL 呢?于是再用 Google 搜索 ms-its 协议。终于找到了,原来是一个 itssdll 在做服务。不过网上查到的解决方案是修改注册表。
要修改 ItssRestrictions 注册表项以启用特定的安全区域,请按照下列步骤 *** 作:
1 单击“开始”,单击“运行”,键入 regedit,然后单击“确定”。
2 找到并单击下面的子项:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\HTMLHelp\1x\ItssRestrictions
注意:如果该注册表子项不存在,则使用方法 1 中的步骤 2a 和 2b 创建该子项。
3 右键单击“ItssRestrictions”子项,指向“新建”,然后单击“DWORD 值”。
4 键入 MaxAllowedZone,然后按 Enter 键。
5 右键单击“MaxAllowedZone”值,然后单击“修改”。
6 在“数值数据”框中,键入 0 至 4 之间的一个数字,然后单击“确定”。
7 退出注册表编辑器。
注意:默认情况下,“MaxAllowedZone”值设置为 0。下表摘要列出了“MaxAllowedZone”值对各个项的解释。 MaxAllowedZone 本地计算机区域 本地 Intranet 区域 受信任的站点区域 Internet 区域 受限站点区域
0 允许 阻止 阻止 阻止 阻止
1 允许 允许 阻止 阻止 阻止
2 允许 允许 允许 阻止 阻止
3 允许 允许 允许 允许 阻止
4 允许 允许 允许 允许 允许
注册表修改之后还是不能打开!
试试偷懒的办法吧——重新注册DLL:regsvr32 itssdll。
四 *** 作系统的语言不是中文(经常出现这种情况)
1看看你的 OS 是不是中文的 OS ? 如果你的 OS 不是 中文的,那么到 Control Pane 中看看那个“语言和区域” 的option, 打开看看“区域选项” 是不是中国,这个选项对一些软件还是有一些影像的。
2如果你的CHM文件是中文的,可能存在缺省语言设置问题。可能你用是的英文版的WINDOWS,把RAGIONAL AND LANGUAGE OPTIONS中的LANGUAGE 和ADVANCED 中的 语言和国家选项都设置成中文(PRC)。就可以了
五可以试试改变此文件的名字比如去掉多余的符号
六如果都不能,最后一招就是,把电子书CHM格式转换为PDF文件:
CHM Converter是一个专门转换CHM格式的文件,它可以把CHM文件转换成PDF、TXT、DOC等常用的格式。
>
ocx控件对于开发过Windows应用的朋友来说一定不会陌生,它以外部component的形式对程序提供强大的支持,如VB工具栏中的picturebox、label、image等都是ocx控件。然而要开发自己的ocx却有一定难度,以前程序员大都用cdk (control develop kit)来设计,但是这需要掌握相当的c语言技巧,其实VB从50开始就支持ocx控件开发,我们可从VB的samples中找到一些例子,然而这些例子比较抽象,不好理解,下面请跟我一起来做个十分实用的ocx控件,你只要懂一些VB编程基础就可以了!
大家对Windows的菜单非常熟悉,这种统一格式的灰色菜单有时并不能满足一些应用程序的要求,特别是那些对界面要求比较高的多媒体设计。问题是,VC、VB中提供的菜单编辑器并不支持图形菜单功能!不要着急,我们马上自己来开发一个!
创建 menus工程
首先打开VB60,在新建工程中选择Activex 控件, 这时设计窗口出现一个类似form表单的界面 这就是你的ocx设计器,缺省名为UserControl1。
1 在"工程"菜单上单击"Project1 属性",打开"工程属性"对话框。选择"通用"选项卡,将工程名称改为menus
2 在UserControl1 的"属性"窗口中点击"名称" 属性并且把用户控件名改为menuControl
你可能注意到, menuControl的"属性"窗口和标准的VB的form"属性"窗口既类似又有不同。记住,现在我们设计的是ocx控件,而不是VB中的form!
添加 Test 工程
由于 ocx 工程不能独立运行,所以我们将添加一个Test工程。在同一工程组中装入设计工程(menus工程)和测试工程(Test工程)将十分有利于调试运行中的部件。
1在"文件"菜单上单击"添加工程"以打开"添加工程"对话框。
注意: 不要单击"打开工程" 或"新建工程",因为这样会关闭控件工程。
2双击"Standard EXE"图标以添加普通的 exe 工程(即我们的Test工程)。
该新工程立即成为这个工程组的"启动"工程。"工程资源管理器"窗口以黑体名字的显示来标识"启动"工程。
注意: ActiveX 控件工程是不能作为启动工程的。
3 在"文件"菜单上单击"保存工程组"用以保存测试工程和工程组。
& ocx代码设计 &
1 在menus工程的module模块中增加如下代码:
Type menuRect '创建用户自定义类型
left As Integer
top As Integer
right As Integer
bottom As Integer
End Type
2 在控件设计窗口中加入一个picturebox控件,取名为bmpmenu。
在bmpmenu中加入另一个picturebox控件,取名为menuitem。
注意: menuitem是bmpmenu的子控件。并且,这两个picturebox的
AutoSize属性皆设为True,BorderStyle属性皆设为None。
3 在控件设计窗口中的General->Declarations中增加如下代码:
Public g_selectedItem As String
Dim g_fileName As String '菜单文件名
Dim g_height As Integer 'ocx控件的高度
Dim g_width As Integer 'ocx控件的宽度
Dim bmpRects() As menuRect 'bmpRects()用来记录所有菜单项的位置
Dim currentItemNumbers As Integer
Dim currentItemNumber As Integer
Public Event MENUITEMDOWN()
注意: MENUITEMDOWN是我们添加到控件中的一个事件,它的详细作用我们稍后会具体介绍。
4 为我们的菜单控件添加两个属性: childs 和 BmpName
childs属性表示菜单控件的菜单项数目, BmpName属性表示菜单控件的菜单文件名
首先,打开menuControl的代码窗口。在"工具"菜单上点击"添加过程"打开"添加过程"对话框。在"名称"框输入名字childs。单击"属性"和"公共的"后再单击"确定"。
你将看到如下的代码:
Public Property Get childs() As Variant
End Property
Public Property Let del1(ByVal vNewValue As Variant)
End Property
然后,在代码窗口更改我们新创建的属性过程(修改的部份以黑体表示):
Public Property Get childs() As Integer
childs = currentItemNumbers
End Property
Public Property Let childs(ByVal vNewValue As Integer)
currentItemNumbers = vNewValue
PropertyChanged "childs"
PopAndResize ' 这是一个子过程
End Property
当你对childs属性赋新值时均执行 Property Let 过程, 而当你对childs属性检索该属性值时均执行 Property Get 过程。
对BmpName属性也同样处理,它的代码部份如下:
Public Property Get BmpName() As String
BmpName = g_fileName
End Property
Public Property Let BmpName(ByVal vNewValue As String)
g_fileName = vNewValue
PropertyChanged "BmpName"
PopAndResize
End Property
5 为了初始化ocx控件,在 UserControl_InitProperties 事件过程中
添加如下代码:
Private Sub UserControl_InitProperties()
BmpName = ""
childs = 0
End Sub
在UserControl_Resize 事件过程中添加如下代码:
Private Sub UserControl_Resize()
If g_height < 20 And g_width < 20 Then '决定设计状态时的控件大小
UserControlHeight = 300
UserControlWidth = 300
Else
UserControlHeight = g_height '决定运行状态时的控件大小
UserControlWidth = g_width
End If
End Sub
注意: ocx控件设计涉及到许多重要概念,大家必须亲自实践才能真正融会贯通,
下面简单地介绍一下ocx的事件过程设计。
与一般的可编程对象不同,ocx控件同时具有设计时和运行时的两种行为。 即开发者在设计时把一个控件放入窗体时,控件中的一些代码将会执行。
例如,把我们设计的menu控件放入test工程的窗体时, 放置在 UserControl_Resize 事件过程中的代码将会执行;当test工程进入运行状态时, UserControl_Resize事件过程中的代码也会执行。所以,我在UserControl_Resize过程中使用IfElse语句来决定menu控件分别在设计状态和运行状态时的尺寸大小。
6 好了,我们的ocx控件马上就要完工了,再坚持一下!(ocx确实有点难度,不过它可是代表最新的技术设计概念哦!)
把下面的sub过程加入ocx设计器的代码部分:
Sub popbmpMenu(xposition As Integer, yposition As Integer, itemNumbers As_ Integer, fileName As String)
ReDim bmpRects(itemNumbers)
bmpmenuVisible = False
g_fileName = fileName
bmpmenuPicture = LoadPicture(g_fileName + "bmp")
menuitemVisible = False
currentItemNumbers = itemNumbers
itemHeight = Int(bmpmenuHeight / itemNumbers)
For i = 0 To itemNumbers - 1
bmpRects(i)left = xposition
bmpRects(i)right = bmpmenuWidth
If i = 0 Then
bmpRects(i)top = yposition
Else
bmpRects(i)top = bmpRects(i - 1)bottom
End If
bmpRects(i)bottom = itemHeight (i + 1)
Next i
bmpmenuZOrder 0
bmpmenuleft = 0
bmpmenutop = 0
bmpmenuVisible = True
g_height = bmpmenuHeight ' 菜单位图文件决定了ocx控件的大小
g_width = bmpmenuWidth
End Sub
Sub PopAndResize()
menuitemVisible = False
If childs > 0 And BmpName <> "" Then
Call popbmpMenu(0, 0, childs, BmpName)
End If
UserControlHeight = g_height ' 调整ocx控件的大小
UserControlWidth = g_width
End Sub
Private Sub GetSelectedItem() '判断哪个菜单项被选中
g_selectedItem = right(g_fileName, 2) + "-" + LTrim(Str(currentItemNumber))
End Sub
最后是两个picturebox上的一些代码:
Private Sub bmpmenu_MouseMove(Button As Integer, Shift As Integer, X As Single, _
Y As Single)
menuitemVisible = False
For i = 0 To currentItemNumbers - 1
If X > bmpRects(i)left And Y > bmpRects(i)top And X < bmpRects(i)right _
And Y < bmpRects(i)bottom Then
currentItemNumber = 0
menuitemPicture = LoadPicture(g_fileName + "-" + LTrim(Str(i + 1)) + "bmp")
currentItemNumber = i + 1
menuitemMove bmpRects(i)left , bmpRects(i)top
menuitemVisible = True
Exit Sub
End If
Next i
End Sub
Private Sub menuitem_MouseDown(Button As Integer, Shift As Integer, X As Single, _
Y As Single)
GetSelectedItem
menuitemVisible = False
'启动MENUITEMDOWN事件,此事件的执行代码不写在ocx
'中,而是写在调用此ocx的应用中。
RaiseEvent MENUITEMDOWN
End Sub
& 测试ocx控件 &
OK, 我们的ocx终于完成了!下面我们可以来测试一下了!
制作一张菜单bmp文件,它的名字为c2bmp,共有5个菜单项。
制作5个菜单项的激活状态位图,取名为c2-1bmp,c2-2bmp,c2-3bmp,c2-4bmp,c2-5bmp
将这些位图文件存放在和工程组同层的文件夹中。
关闭ocx设计器窗口,打开ocxTest窗口,我们发现在ToolBox工具栏中多了一个新的控件,这就是我们所设计的menuControl。在ocxTest窗口上放置一个menuControl控件,然后在代码窗口中填入以下程序:
Private Sub Form_Click()
menuControl1BmpName = AppPath + "\c2"
menuControl1childs = 5
menuControl1Visible = True
End Sub
Private Sub Form_Load()
menuControl1Visible = False
End Sub
Private Sub menuControl1_MENUITEMDOWN()
menuControl1Visible = False
Dim selectMenu As Integer
selectMenu = Val(Trim(Mid(menuControl1g_selectedItem, 4, 2)))
Select Case selectMenu
Case 1
'第一个菜单项被选中
Case 2
'第二个菜单项被选中
Case 3
'第三个菜单项被选中
Case 4
'第四个菜单项被选中
Case 5
'第五个菜单项被选中
End Select
End Sub
怎么样调用够简单的吧!这正是微软提出的组件设计的优势。不错,ocx设计的确有些难度,然而一旦设计好,它的调用是十分方便的。ocx的可重用率和易维护性是值得我们在设计时多花些时间的,更重要的是,在软件设计越来越复杂的今天,采用正确的组件设计思想是尤为关键的!
& 编译ocx &
如果一切顺利的话,我们就可以编译ocx了。
1 在"工程资源管理器"窗口单击"menus"以选择该工程。
2 在"文件"菜单上单击"生成 menuControlocx" 。
注意: 如果你需要你的ocx控件具有许可证,可按如下 *** 作
在"工程"菜单上,点击"menus 属性"打开"工程属性"对话框。选择"通用"选卡,选定"要求许可证关键字",然后单击"确定"。
这样,即使有人将你的ocx拷贝了去,他也无法使用!你就不必担心你的心血被人侵犯喽!
& 使用ocx控件 &
由于我们的ocx已经编译成功,所以现在就可以像使用系统中的标准控件一样来调用我们的menuControlocx了。
退出设计时的工程组,新建一个VB的标准工程,在"工程"菜单上单击"部件",在 Controls 的选项卡上,复选"menus"后再单击"确定"。现在menuControl控件和Label,TextBox等控件就一样被对待处理了,只不过menuControl是我们自己设计的!
菜单的图形文件起名有一定规则,大家只要看一下程序就明白了。当然,读者朋友们也可以按自己喜欢的方式来处理文件名。
& 后记 &
ocx控件设计还涉及到许多方方面面,由于篇幅有限,这里就不详述了(其实,大家能坚持到这里就够有耐心了! (-_-) )。menuControl还有不少地方需要改进,这就待以后再慢慢完善了。
是的,ocx插件就是必须每台使用的电脑都必须安装ocx插件,所以你需要提供一个ocx插件的下载地址,让每个使用的用户下载这个插件;而且ocx插件的局限性不仅于此,ocx插件对浏览器也有限制,比如:ocx插件只支持系统自带的IE低版本的浏览器,其他厂商的浏览器基本都不支持
首先ocx控件要在网页上引用,形如:然后在js中,就可以通过1varmyocx=documentgetElementById("ocxobj");来得到这个控件对象myocx变量能够执行控件的方法,也能够访问控件的属性
1、首先打开浏览器,百度搜索“threed32ocx 64”,找一个安全的网站进行下载。
2、下载完成后,将下载下来的压缩包进行解压。
3、然后在d出来的窗口中点击打开C:\Windows中的SysWOW64文件夹。
4、然后将解压的threed32ocx 64位文件复制粘贴到该文件夹中。
5、然后按“win+R”打开运行窗口,输入命令“regsvr32 threed32ocx 64位”,回车确定就完成了。
视频播放器可以创建WMPlayer 对象
然后就可以编译了……(系统必须有WMPlayer播放器)
版本 2
程序集变量 wm, 对象
子程序 __启动窗口_创建完毕
wm = CreateWMPlayer (标签1取窗口句柄 (), 0, 0, 标签1宽度, 标签1高度)
wm写属性 (“URL”, “播放文件路径”)
子程序 CreateWMPlayer, 对象, , 创建WMPlayer对象
参数 父窗口句柄
参数 左边位置, 整数型, 可空
参数 顶边位置, 整数型, 可空
参数 窗口宽度, 整数型, 可空
参数 窗口高度, 整数型, 可空
参数 窗口风格, 整数型, 可空, WS_常量
参数 扩展风格, 整数型, 可空, WS_EX常量
参数 返回句柄, 整数型, 参考 可空, 返回句柄
局部变量 _wm, 对象
局部变量 _hwnd, 整数型
局部变量 _Style, 整数型
如果真 (窗口风格 = 0)
_Style = #WS_CHILDWINDOW + #WS_CLIPSIBLINGS + #WS_CLIPCHILDREN + #WS_VISIBLE ' 默认
如果真结束
AtlAxWinInit ()
_hwnd = CreateWindowEx (扩展风格, “AtlAxWin”, “WMPlayerOCX”, _Style, 左边位置, 顶边位置, 窗口宽度, 窗口高度, 父窗口句柄, 0, 0, 0)
AtlAxGetControl (_hwnd, _wm)
返回句柄 = _hwnd
返回 (_wm)
版本 2
常量 WS_CHILDWINDOW, "1073741824"
常量 WS_VISIBLE, "268435456"
常量 WS_CLIPSIBLINGS, "67108864"
常量 WS_CLIPCHILDREN, "33554432"
版本 2
DLL命令 AtlAxWinInit, 整数型, "atldll", "AtlAxWinInit", , 此函数初始化承载代码ATL的控件通过注册 "AtlAxWin80" 和 "AtlAxWinLic80" 窗口选件类以及两个自定义windows消息。
DLL命令 AtlAxGetControl, 整数型, "atldll", "AtlAxGetControl", , 获取一个直接接口指针。控件中包含的于原始的指定windows消息的句柄。
参数 h, , , 一个处理到承载控件的窗口
参数 x, 对象
DLL命令 CreateWindowEx, 整数型, "user32", "CreateWindowExA", , CreateWindowEx函数通过扩展格式创建一个层叠的,自动d出的(pop-up)或是一个子窗口。另外这个函数的作用与CreateWindow函数的作用相同。
参数 dwExStyle, 整数型
参数 lpClassName, 文本型
参数 lpWindowName, 文本型
参数 dwStyle, 整数型
参数 x, 整数型
参数 y, 整数型
参数 nWidth, 整数型
参数 nHeight, 整数型
参数 hWndParent, 整数型
参数 hMenu, 整数型
参数 hInstance, 整数型
参数 lpParam, 整数型
以上就是关于C#如何调用OCX文件全部的内容,包括:C#如何调用OCX文件、无法打开chm文件、VB activex ocx控件 菜单编辑器等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)