基于VC的2D图形控件

明亮 posted @ 2010年12月13日 00:27 in 【C#】 , 4545 阅读
本文发表于:http://fml927.is-programmer.com

一个比较不错的开源图形Active X控件:

http://www.codeproject.com/KB/miscctrl/ntgraph_activex.aspx

其附带的Demo截图:

 

 

 

Active X控件用法说明:

摘自http://topic.csdn.net/t/20030509/11/1759758.html

 

一、   使用Regsvr32.exe程序对ActiveX控件进行注册
       (如果程序使用了没有注册ActiveX控件,将无法运行)  
     对于未注册过的ActiveX控件可使用此软件对其进行注册,外来ActiveX控件要应用到自己的程序中也必须进行注册。该文件位于Windows目录的system子目录下。使用方法如下:点击“开始”→“运行”;在运行对话框中输入以下命令:   
    regsvr32     <文件名>     //注册一个ActiveX控件 
    regsvr32 /u  <文件名>     //解除某ActiveX控件的注册 
     我们使用一些带ActiveX控件的应用程序时,有时会出现不能运行的情况,这有可能是其自带ActiveX控件未注册所至,这时不妨使用上述命令一试。另外,VC++使用者若对regsvr32.exe的编码感兴趣的话,可在VC++的联机帮助中找到其源代码。若使用VC++   6.0,则在MSDN光盘的\sample\VC98\MFC\controls\regsvr中。   
 
二、   使用安装程序制作软件:InstallShield         
       使用regsvr32.exe来注册ActiveX控件虽然简单,但需要用户手工注册,在不用时还得手工解除注册,因此,这对一个应用程序来说并非好的解决方案。大型应用软件一般都有一个安装程序,在安装程序中解决ActiveX控件注册是较为理想的一种方案。使用InstallShield可以制作出专业级的Setup,还可注册其中的ActiveX控件;而且,在以后携载软件时,自动注销掉以前注册的ActiveX控件。方法如下:   
     1.   启动InstallShield,使用Project   Wizard建立一个新的项目;  
     2.   新建一个“File   Group”,将需要注册的ActiveX控件文件放入此“File   Group”中;
     3.   将上述“File   Group”的“Self-Registered”属性设置成“Yes”。  
     上述步骤仅为制作Setup中设置自动注册ActiveX控件几步,至于使用InstallShield怎样制作一个完整的Setup不在本文讨论范围之中,请读者自己参看有关书籍。   
 
三、   在应用程序中加入注册代码  
     对于小型程序不宜采取第二种方法,较好的方法是在程序中嵌入注册代码,实现应用程序自注册。其编程方法是: 
     1.   使用Windows   API函数LoadLibrary载入ActiveX控件;   
     2.   使用GetProcAddress函数获取ActiveX控件中注册函数DllRegisterServer(注销函数为DllUnregisterServer)指针;   
     3.   调用注册函数DllRegisterServer(或注销函数DllUnregisterServer)。   
举例如下:
     下面以VC++   6.0编写的RegActivex程序为例,介绍怎样在程序中自动注册(注销)ActiveX控件。RegActivex的主体框架由VC++   6.0的AppWizard自动产生,在其基础上增加两个菜单项:“注册ActiveX控件”、“注销ActiveX控件”。当选择“注册ActiveX控件”菜单时,将对控件toweratl.ocx(一个汉诺游戏)进行注册;当选择“注销ActiveX控件”菜单时,将解除控件toweratl.ocx的注册。   
     1.   使用VC++   6.0建立一个单文档的应用程序RegActivex,其他项目接受默认设置;   
     2.   给应用程序增加两个菜单项:“注册ActiveX控件”、“注销ActiveX控件”,步骤如下:   
     ①   单击VC++   6.0左边窗口的“ResoureView”,双击MENU项目下的IDR_MAINFRAME以打开菜单编辑器;  
     ②   在菜单编辑器中,加入一个主菜单“注册”,在“注册”主菜单下加入两个菜单项:“注册ActiveX控件”、“注销ActiveX控件”;   
     3.   给新建的菜单项   “注册ActiveX控件”   和“注销ActiveX控件”增加响应函数:   
     ①   在资源编辑其中,双击MENU中的IDR_MAINFRAME打开菜单编辑器,单击“注册ActiveX控件”,按Ctrl+W打开MFC   Class   Wizard;   
     ②  双击Messages框中的COMMAND,给“注册ActiveX控件”菜单项增加响应函数OnRegisterReg(),单击右边“Edit”按钮给OnRegisterReg()函数增加如下代码:   
void   CMainFrame::OnRegisterReg() 
{ 
	//ActiveX控件的路径及文件名 
	LPCTSTR   pszDllName= "toweratl.ocx "; 
				//装载ActiveX控件 
	HINSTANCE   hLib   =   LoadLibrary(pszDllName); 
	if   (hLib   <   (HINSTANCE)HINSTANCE_ERROR) 
	{ 
	      MessageBox( "不能载入Dll文件! ", "结果 ",MB_OK); 
	      return; 
	} 
	//获取注册函数DllRegisterServer地址 
	FARPROC   lpDllEntryPoint;   
	lpDllEntryPoint   =   GetProcAddress(hLib,_T( "DllRegisterServer ")); 
	
	//调用注册函数DllRegisterServer 
	if(lpDllEntryPoint!=NULL) 
	{ 
		if(FAILED((*lpDllEntryPoint)())) 
		{ 
			MessageBox( "调用DllRegisterServer 失败! ", "结果 ",MB_OK); 
			FreeLibrary(hLib); 
			return; 
		}; 
		MessageBox( "注册成功 ", "结果 ",MB_OK); 
	} 
	else 
	{
		MessageBox( "调用DllRegisterServer失败!", "结果 ",MB_OK); 
	} 
}    
           
     ③   “注销ActiveX控件”菜单项响应函数的编写方法同上,代码也相似,只是将   
     “lpDllEntryPoint   =   GetProcAddress(hLib,_T( "DllRegisterServer "));”
改成: 
     “lpDllEntryPoint   =   GetProcAddress(hLib,_T( "DllUnregisterServer "));”
 
     4.   编译联接上述程序,即可得一个可执行文件。另需注意的是:应将ActiveX控件文件toweratl.ocx复制到Windows的system目录下。控件文件toweratl.ocx在微软出版的《Visual   C++   6.0程序员指南》所附光盘中可以找到。
  
     5.   测试上述程序:运行《Visual   C++   6.0程序员指南》所附光盘中的game2程序,若使用RegActivex注册了toweratl.ocx控件,则该程序可以正常运行;若使用RegActivex注销了toweratl.ocx控件则game2不能运行。 
  • 无匹配
  • 无匹配
civaget 说:
2023年12月11日 03:51

백링크하이's commitment to quality is unmatched. They're a game-changer in the SEO industry.

civaget 说:
2023年12月14日 23:08

I'm constantly recommending 뉴토끼 to friends who want to explore the world of webtoons.

civaget 说:
2023年12月22日 00:48

오피뷰's cloud integration is a lifesaver for remote work flexibility.

civaget 说:
2023年12月23日 18:55

Explore the world of 휴게텔, your gateway to unparalleled comfort and luxury.

civaget 说:
2023年12月26日 23:06

해외축구중계 is a game-changer. It's like having a personal soccer concierge.

civaget 说:
2023年12月30日 20:44

오피가이드 is my trusted companion for finding the perfect massage spot in town.

civaget 说:
2024年1月01日 23:13

I'm always excited to read the latest 오피매거진 articles for urban relaxation tips.

civaget 说:
2024年1月06日 22:39

오피스타 simplifies the process of finding massage parlors nearby. It's a must-have tool.

civaget 说:
2024年1月14日 18:10

Quality and variety define 누누티비 다시보기. Truly impressive content selection.


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter