VC6.0开发ocx插件
VC6.0中控件及按钮的设置和使用
VC6.0中控件及按钮的设置和使用VC学习笔记1:按钮的使能与禁止用ClassWizard的Member Variables为按钮定义变量,如:m_Button1;则m_Button1.EnableWindow(true); 使按钮处于允许状态m_Button1.EnableWindow(false); 使按钮被禁止,并变灰显示VC学习笔记2:控件的隐藏与显示用CWnd类的函数BOOL ShowWindow(int nCmdShow)可以隐藏或显示一个控件。
例1:CWnd *pWnd;pWnd = GetDlgItem( IDC_EDIT1 ); //获取控件指针,IDC_EDIT为控件ID号pWnd->ShowWindow( SW_HIDE ); //隐藏控件例2:CWnd *pWnd;pWnd = GetDlgItem( IDC_EDIT1 ); //获取控件指针,IDC_EDIT为控件ID号pWnd->ShowWindow( SW_SHOW ); //显示控件以上方法常用于动态生成控件,虽说用控件的Create函数可以动态生成控件,但这种控件很不好控制,所以用隐藏、显示方法不失为一种替代手段。
VC学习笔记3:改变控件的大小和位置用CWnd类的函数MoveWindow()或SetWindowPos()可以改变控件的大小和位置。
void MoveWindow(int x,int y,int nWidth,int nHeight);void MoveWindow(LPCRECT lpRect);第一种用法需给出控件新的坐标和宽度、高度;第二种用法给出存放位置的CRect对象;例:CWnd *pWnd;pWnd = GetDlgItem( IDC_EDIT1 ); //获取控件指针,IDC_EDIT1为控件ID号pWnd->MoveWindow( CRect(0,0,100,100) ); //在窗口左上角显示一个宽100、高100的编辑控件SetWindowPos()函数使用更灵活,多用于只修改控件位置而大小不变或只修改大小而位置不变的情况:BOOL SetWindowPos(const CWnd* pWndInsertAfter,int x,int y,int cx,int cy,UINT nFlags);第一个参数我不会用,一般设为NULL;x、y控件位置;cx、cy控件宽度和高度;nFlags常用取值:SWP_NOZORDER:忽略第一个参数;SWP_NOMOVE:忽略x、y,维持位置不变;SWP_NOSIZE:忽略cx、cy,维持大小不变;例:CWnd *pWnd;pWnd = GetDlgItem( IDC_BUTTON1 ); //获取控件指针,IDC_BUTTON1为控件ID号pWnd->SetWindowPos( NULL,50,80,0,0,SWP_NOZORDER | SWP_NOSIZE ); //把按钮移到窗口的(50,80)处pWnd = GetDlgItem( IDC_EDIT1 );pWnd->SetWindowPos( NULL,0,0,100,80,SWP_NOZORDER | SWP_NOMOVE ); //把编辑控件的大小设为(100,80),位置不变pWnd = GetDlgItem( IDC_EDIT1 );pWnd->SetWindowPos( NULL,0,0,100,80,SWP_NOZORDER ) ; //编辑控件的大小和位置都改变以上方法也适用于各种窗口。
vb开发ocx实例
vb开发ocx实例【最新版】目录1.什么是 OCX?2.VB 开发 OCX 实例的过程3.OCX 控件的使用方法4.总结正文一、什么是 OCX?OCX(Object Control Extension)是一种可重用的软件组件,它是由 Microsoft 开发的一种 COM(Component Object Model)控件技术。
OCX 控件可以在不同的编程语言和平台之间进行互操作,这使得开发人员可以更轻松地创建具有丰富功能的应用程序。
二、VB 开发 OCX 实例的过程1.创建一个新的 ActiveX 控件库项目首先,在 Visual Basic 中创建一个新的 ActiveX 控件库项目。
这可以通过选择“新建”>“ActiveX 控件库”来实现。
2.设计 OCX 控件接下来,设计 OCX 控件。
这包括为控件添加属性、方法和事件。
例如,可以添加一个名为“HelloWorld”的按钮,当单击该按钮时,会触发一个名为“OnButtonClick”的事件,并显示一条消息框。
3.编译和测试 OCX 控件完成控件设计后,编译并测试 OCX 控件。
这可以通过选择“编译”来实现。
如果编译成功,将生成一个名为“YourControl.ocx”的文件。
4.在 VB 应用程序中使用 OCX 控件现在,可以将 OCX 控件添加到 VB 应用程序中。
首先,将生成的“YourControl.ocx”文件复制到应用程序项目的“Controls”文件夹中。
然后,在 Visual Basic 中引用该控件,并在窗体上添加一个实例。
三、OCX 控件的使用方法1.引用 OCX 控件在 VB 代码中引用 OCX 控件,需要使用“Imports”语句。
例如,要引用上面创建的“YourControl.ocx”控件,可以添加以下代码:```Imports YourControl```2.创建 OCX 控件实例在 VB 代码中创建 OCX 控件实例,需要使用“CreateObject”函数。
VC++6.0操作简介
VC++6.0操作简介一、 VC++6.0VC++6.0二、 VC++6.0环境的基本操作1. 建立应用程序操作步骤如下:(1) 关闭 当前工作区:【文件】→【关闭 工作区】 (必要时)(2) 建立工程:【文件】→【新建】(出现“新建”对话框)在“新建”对话框中选中“工程”选项卡→选中其中的“Win32 Console Application”项→选择存储“位置”→输入工程名→单击“确定”按钮(出现“Win32Console Application”对话框)在“Win32 Console Application”对话框中选择“An empty project”选项→单击“完成”按钮注意:在操作过程中,如果出现提示性对话框,可根据具体情况按“确定”或“取消”按钮。
至此,一个新的工程已经建立,接下来,可以在该工程中建立文件或(和)将已经存在的文件添加到工程中:在工程中新建文件:【工程】→【添加工程】→【新建】(出现“新建”对话框)在“新建”对话框中选中“文件”选项卡→选中其中的“C++ Source File”或者“C/C++ Header File”项→选择新建的置(目录)→输入文件名→单击“确定”按钮→输入文件内容。
例如,新建的名为M1.cpp的源文件内容如下:向工程中添加文件【工程】→【添加工程】→【Files…】(出现“插入文件到工程”对话框)在“插入文件到工程”对话框中选中要插入的文件→选择文件要插入的工程(插入到)→单击“确定”按钮2.编辑文件操作步骤如下:在“工作区”窗口中选择“FileView”选项卡→展开相应工程的文件分支(工程名files)→双击类要编辑的文件名(此时,相应文件的内容已经显示在编辑窗口中)→对文件进行编辑3.编译、构建与运行应用程序编译源文件:在“工作区”窗口选择“FileView”选项卡→选择要编译的源文件→【编译】→【编译xx】构建可执行文件:设置活动工程(工作区中有多个工程时):【工程】→【设置活动工程】→【xx (工程名)】【编译】→【构建xx.exe】运行应用程序:设置活动工程(工作区中有多个工程时):【工程】→【设置活动工程】→【xx (工程名)】【编译】→【执行xx.exe】4.在工程中新建类(1)新建类:设置活动工程(工作区中有多个工程时需要此步)。
使用VC++6.0系统
附录A:使用VC++6.0系统Visual C++6.0系统(简称为VC++6.0系统)是微软公司于1998年推出的基于windows 9x 和windows NT的优秀集成开发环境。
面向对象的程序设计方法与可视开发环境的完美结合,使VC++6.0系统深受广大软件开发者和程序设计人员的喜爱VC++6.0系统不仅是C++语言的集成开发环境,而且还是开发32位windoWS应用程序的强大工具。
它所提供的一系列功能丰富的编程工具,使编写在windoWS环境下运行的应用程序十分简洁、快速。
同时,基于类库的设计方法又使编写面向对象的程序变得更为简单,开发出的应用程序的代码效率高。
如果计算机上已经安装了VC++6.0系统,可通过用鼠标单击Microsoft ViruseC++6.0菜单项启动VC++6.0系统,屏幕上显示如图A.1所示的VC++6.0系统的主窗口。
由于设置不同,看到的窗口与图A.1所示的窗口可能有些差别。
图A.1 VC++6.0系统的主窗口下面简要介绍在VC ++6.0系统中开发应用程序的过程。
由于在数据结构课程实验中主要是完成有关C++语言方面的练习,而不去考虑编写Windows GUI(Graphic User Interface,图形用户界面)程序时的一些复杂情况,本章只介绍在VC++6.0系统下生成筒单的控制台(console)应用程序,即生成字符方式应用程序的过程。
在VC++6.0系统中.可以使用编写字符方式程序时常用的技术编写控制台应用程序。
具体地说,在程序中可以使用C++的stdio.h等头文件说明的函数读取输入的数据和显示输出等。
对于一个编写好的C++源程序.要想在VC++6.0系统环境下运行,需要经过以下步骤。
A.1 生成项目现在的应用程序,尤其是Windows 应用程序,一般由多个文件组成,其中包括源文件、头文件、资源文件等。
为使组成程序的所有文件能够形成一个有机的整体,引入了项目的概念,即把一个应用程序作为一个项目。
RTX插件开发(一)--CsDemoClient(VC6.0)
RTX插件开发(一)CsDemoClient(VC6.0)一、前言我想实现客户端的插件与服务器端的应用进行通讯,采用RTX的通道进行通讯,而不是自已再写一条通道;我想在RTX客户端面版上增加一个属于我自己的面版,服务器端发过来的数据在该面版显示出来;我在自己的面版本点击某个按钮,可以把数据发送给服务器应用。
通过本章的学习,您将能实现以上的功能,实际上在RTX客户端添加一个面版,就是把自己做好的一个Activ eX控件嵌入进插件,插件加截时把Ocx显示出来;因此开发RTX插件需要对Activ eX控件及COM有一定的了解。
二、技术说明正如前言介绍,在客户端添加面版,需要把自己做好的一个Activ eX控件嵌入进插件,因此要创建两个工程,一个Activ eX控件工程(本文Activ eX为ocx),实现界面的功能;一个是RTX插件工程(插件简称dll);实现与RTX内核交互的功能。
即然是两个不同的模块,必须先解决ocx与dll之间数据传输,本文通过ATL 事件解决此问题,ATL事件是本文的主要难点。
注意:ocx向应用发送数据时,不需要先把数据发给dll,再由d ll发给应用,直接通过ocx在初始化时得到的IRTXCRootPtr指针获取IRTX ModulePtr发送数据;当dll收到从应用发过来消息时,激发ATL事件,ocx通过ATL事件接收器获取事件,并得到事件传过来的数据。
另外把ocx嵌入dll需要在ocx实现几个插件接口,否则它们无法关联在一起,这一点应该比较好理解。
插件与Activ eX控件主要技术要点和步骤如下:a)插件要点1.生成RTX插件工程2.A TL组件设计3.DLL事件激发设计b)ActiveX控件要点1. 创建ocx工程2. 实现插件接口3. 事件接收器设计4. ocx界面设计5. 收发数据c)插件打包1. 打包准备2. 打包步骤d)安装调试1. 安装插件2. 启动应用3. 插件发数据给应用2. 应用发数据给插件三、操作步骤a)插件开发步骤1.生成RTX插件工程先安装RTXCSDK安装包,在其安装目录下有三个文件夹我们必须了解;wizard文件夹:插件生成向导文件RTXCModuleAW.awx放在该目录下,开发前第一件事就是先把RTXCModuleAW.awx文件拷贝到VC安装目录Microsoft V isualStudio\COMMON\MSDev98\Template\ 文件下。
VC6创建ocx工程的步骤
1、新建工程。
选择MFC Activex ControlWizard。
默认点击完成。
2、按Ctrl+W,出现建立向导,点击automation选项卡,点击Add Method。
添加函数3、输入函数名,函数返回值,函数参数。
即完成函数添加。
4、在工程cpp类中,加入以下代码,确保页面调用能正常#include "comcat.h"//页面安全const CATID CATID_SafeForScripting ={0x7dd95801,0x9882,0x11cf,{0x9f,0xa9,0x00,0xaa,0x00,0x6c,0x42,0xc4}};const CATID CATID_SafeForInitializing ={0x7dd95802,0x9882,0x11cf,{0x9f,0xa9,0x00,0xaa,0x00,0x6c,0x42,0xc4}};////////////////////////////////////////////////////////////////////////////// CV oiceApp::InitInstance - DLL initialization// 创建组件种类HRESULT CreateComponentCategory(CATID catid, WCHAR* catDescription){ICatRegister* pcr = NULL;HRESULT hr = S_OK ;hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr, NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&pcr);if (FAILED(hr))return hr; // Make sure the HKCR\Component Categories\{..catid} // key is registered.CA TEGORYINFO catinfo;catinfo.catid = catid;catinfo.lcid = 0x0409 ; // english// Make sure the provided description is not too long.// Only copy the first 127 characters if it is.int len = wcslen(catDescription);if (len>127)len = 127;wcsncpy(catinfo.szDescription, catDescription, len);// Make sure the description is null terminated.catinfo.szDescription[len] = '\0';hr = pcr->RegisterCategories(1, &catinfo);pcr->Release();return hr;}// 注册组件种类HRESULT RegisterCLSIDInCategory(REFCLSID clsid, CA TID catid){// Register your component categories information.ICatRegister* pcr = NULL ;HRESULT hr = S_OK ;hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr, NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&pcr);if (SUCCEEDED(hr)){// Register this category as being implemented by the class.CATID rgcatid[1] ;rgcatid[0] = catid;hr = pcr->RegisterClassImplCategories(clsid, 1, rgcatid);}if (pcr != NULL)pcr->Release();return hr;}// 卸载组件种类HRESULT UnRegisterCLSIDInCategory(REFCLSID clsid, CA TID catid){ICatRegister* pcr = NULL ;HRESULT hr = S_OK ;hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr, NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&pcr);if (SUCCEEDED(hr)){// Unregister this category as being implemented by the class.CATID rgcatid[1] ;rgcatid[0] = catid;hr = pcr->UnRegisterClassImplCategories(clsid, 1, rgcatid);}if (pcr != NULL)pcr->Release();return hr;}5.在cpp类中修改下面这两个函数:STDAPI DllRegisterServer(void){HRESULT hr = S_OK ;AFX_MANAGE_STATE(_afxModuleAddrThis);if (!AfxOleRegisterTypeLib(AfxGetInstanceHandle(), _tlid))return ResultFromScode(SELFREG_E_TYPELIB);if (!COleObjectFactoryEx::UpdateRegistryAll(TRUE))return ResultFromScode(SELFREG_E_CLASS);// 标记控件初始化安全.// 创建初始化安全组件种类hr = CreateComponentCategory(CATID_SafeForInitializing, L"Controls safely initializable from persistent data!");if (FAILED(hr))return hr;// 注册初始化安全hr = RegisterCLSIDInCategory(_tlid, CATID_SafeForInitializing);if (FAILED(hr))return hr;// 标记控件脚本安全// 创建脚本安全组件种类hr = CreateComponentCategory(CATID_SafeForScripting, L"Controls safely scriptable!");if (FAILED(hr))return hr;// 注册脚本安全组件种类hr = RegisterCLSIDInCategory(_tlid, CATID_SafeForScripting);if (FAILED(hr))return hr;return NOERROR;}/////////////////////////////////////////////////////////////////////////////// DllUnregisterServer - Removes entries from the system registrySTDAPI DllUnregisterServer(void){HRESULT hr = S_OK ;AFX_MANAGE_STATE(_afxModuleAddrThis);if (!AfxOleUnregisterTypeLib(_tlid, _wVerMajor, _wVerMinor))return ResultFromScode(SELFREG_E_TYPELIB);if (!COleObjectFactoryEx::UpdateRegistryAll(FALSE))return ResultFromScode(SELFREG_E_CLASS);// 删除控件初始化安全入口.hr=UnRegisterCLSIDInCategory(_tlid, CATID_SafeForInitializing);if (FAILED(hr))return hr;// 删除控件脚本安全入口hr=UnRegisterCLSIDInCategory(_tlid, CATID_SafeForScripting);if (FAILED(hr))return hr;return NOERROR;}6. 在ctrl.cpp类中加入如下代码(IMPLEMENT_OLECTLTYPE(CNetV oiceCtrl, IDS_NETVOICE, _dwNetV oiceOleMisc) 后面加入)////////////------------------------------------------------BEGIN_INTERFACE_MAP( CNetV oiceCtrl, COleControl )INTERFACE_PART(CNetV oiceCtrl, IID_IObjectSafety, ObjSafe)END_INTERFACE_MAP()//.............................................................................// IObjectSafety member functions// Delegate AddRef, Release, QueryInterfaceULONG FAR EXPORT CNetV oiceCtrl::XObjSafe::AddRef(){METHOD_PROLOGUE(CNetV oiceCtrl, ObjSafe)return pThis->ExternalAddRef();}ULONG FAR EXPORT CNetV oiceCtrl::XObjSafe::Release(){METHOD_PROLOGUE(CNetV oiceCtrl, ObjSafe)return pThis->ExternalRelease();}HRESULT FAR EXPORT CNetV oiceCtrl::XObjSafe::QueryInterface( REFIID iid, void FAR* FAR* ppvObj){METHOD_PROLOGUE(CNetV oiceCtrl, ObjSafe)return (HRESULT)pThis->ExternalQueryInterface(&iid, ppvObj); }const DWORD dwSupportedBits =INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA;const DWORD dwNotSupportedBits = ~dwSupportedBits;//.............................................................................// CStopLiteCtrl::XObjSafe::GetInterfaceSafetyOptions// Allows container to query what interfaces are safe for what. We're// optimizing significantly by ignoring which interface the caller is// asking for.HRESULT STDMETHODCALLTYPECNetV oiceCtrl::XObjSafe::GetInterfaceSafetyOptions(/* [in] */ REFIID riid,/* [out] */ DWORD __RPC_FAR *pdwSupportedOptions,/* [out] */ DWORD __RPC_FAR *pdwEnabledOptions) {METHOD_PROLOGUE(CNetV oiceCtrl, ObjSafe)HRESULT retval = ResultFromScode(S_OK);// does interface exist?IUnknown FAR* punkInterface;retval = pThis->ExternalQueryInterface(&riid,(void * *)&punkInterface);if (retval != E_NOINTERFACE) { // interface exists punkInterface->Release(); // release it--just checking!}// we support both kinds of safety and have always both set,// regardless of interface*pdwSupportedOptions = *pdwEnabledOptions = dwSupportedBits;return retval; // E_NOINTERFACE if QI failed}/////////////////////////////////////////////////////////////////////////////// CStopLiteCtrl::XObjSafe::SetInterfaceSafetyOptions// Since we're always safe, this is a no-brainer--but we do check to make // sure the interface requested exists and that the options we're asked to // set exist and are set on (we don't support unsafe mode).HRESULT STDMETHODCALLTYPECNetVoiceCtrl::XObjSafe::SetInterfaceSafetyOptions(/* [in] */ REFIID riid,/* [in] */ DWORD dwOptionSetMask,/* [in] */ DWORD dwEnabledOptions){METHOD_PROLOGUE(CNetV oiceCtrl, ObjSafe)// does interface exist?IUnknown FAR* punkInterface;pThis->ExternalQueryInterface(&riid, (void * *)&punkInterface);if (punkInterface) { // interface existspunkInterface->Release(); // release it--just checking!}else { // interface doesn't existreturn ResultFromScode(E_NOINTERFACE);}// can't set bits we don't supportif (dwOptionSetMask & dwNotSupportedBits) {return ResultFromScode(E_FAIL);}// can't set bits we do support to zerodwEnabledOptions &= dwSupportedBits;// (we already know there are no extra bits in mask )if ((dwOptionSetMask & dwEnabledOptions) !=dwOptionSetMask) {return ResultFromScode(E_FAIL);}// don't need to change anything since we're always safereturn ResultFromScode(S_OK);}7. 在ctrl.h中加入以下代码:#include <objsafe.h>DECLARE_INTERFACE_MAP()BEGIN_INTERFACE_PART(ObjSafe, IObjectSafety)STDMETHOD_(HRESULT, GetInterfaceSafetyOptions) (/* [in] */ REFIID riid,/* [out] */ DWORD __RPC_FAR *pdwSupportedOptions,/* [out] */ DWORD __RPC_FAR *pdwEnabledOptions);STDMETHOD_(HRESULT, SetInterfaceSafetyOptions) (/* [in] */ REFIID riid,/* [in] */ DWORD dwOptionSetMask,/* [in] */ DWORD dwEnabledOptions);END_INTERFACE_PART(ObjSafe);8.页面代码中,添加如下代码:<objectid="NetV oice"codebase="NetV oice.ocx"classid="clsid:439A1200-A72F-48A5-970D-64EFD9192613"></object>。
vc6.0或mfc中没有Micrisoft ADO Data Control6.0控件怎么办
在我们使用MFC ADO数据库访问技术的时候经常要使用Micrisoft ADO Data Control6.0和Micrisoft DataGrid控件,但是我们会发现我们的vc6.0中点击插入ActiveX控件,如下图所示,并没有Micrisoft ADO Data Control6.0这个控件那么我们该怎么办呢?其实,可以这样解决。
1.查看电脑上是否有如下两个文件:MSDATGRD.OCX和MSADODC.OCX文件
32位系统在 C:\Windows\System32目录下查看;
64位系统在 C:\Windows\SysWOW64目录下查看。
如果目录下没有这两个文件,那么就需要下载,链接如下:
MSADODC.OCX下载
MSDATGRD.OCX下载
下载好之后,将下载的文件根据系统位数放入相应的目录下。
2.我们需要以管理员身份打开命令提示符,进行控件的注册
进入到我们文件保存的目录:
64位进入 C:\Windows\SysWOW64(不会操作的看文档最后,有介绍)然后输入regsvr32 MSADODC.OCX 回车
就可以得到如下图所示的结果
32位进入 C:\Windows\System32
然后输入regsvr32 MSADODC.OCX 回车
这样我们的控件就注册好了,再次插入ActiveX控件就可以看到我们的Micrisoft ADO Data Control6.0这个控件了。
最后呢,有些朋友可能不会在命令行窗口进行操作,这里简单介绍几种:
cd .. 回到当前目录的上一级目录cd 目录A 进入目录A
d:进入D盘
注意:输入这些命令后都是要按回车键才会执行。
VC++6.0使用手册(史上最全)
图1-1Visual C++界面开项目工作区文件时其他文件随即会自动打开。
在此文件夹下还会创建 Res(资源)、Debug(调试)、Release(发行)等子文件夹。
2.2编辑 在编辑窗口打开、浏览文件、输入、修改、复制、剪切、粘贴、查找、替换、撤销等操作,可以通过菜单完成,也可以通过工具栏按钮完成,这些与 Word 之类的 windows 编辑器用法完全相同,这里就不再重复叙述了。
2.3辅助VC 不仅提供了“语法着色”帮助我们阅读程序,还可以通过一些快捷键检查常见的括号不匹配错误。
MSDN 也可以在编辑过程中提示存在的变量名、函数名。
很多程序员借助类似 Visual Assist X 的工具辅助开发,减少程序出错的可能性。
3.开发 C 程序3.1开发单个 C 语言程序1. 创建一个工作文件夹。
由于开发过程会产生一系列文件,建议每开发一个新的 C 程序都创建一个工作文件夹。
还可以将所有工作文件夹集中到一起,如E:\LXH\EX01-01 、E:\LXH\EX03-02 等。
2. 启动 Visual C++。
3. 新建一个 C 语言源程序。
选择菜单:File 下的 New 菜单项,出现如图 1-2 所示 new(新建)对话框。
图1-2选择菜单File下的New菜单项选择 Files标签下的 C++Source File 在“E:\LXH\EG01-01”文件夹中创建C 程序:eg01-01.c,如图 1-3 所示。
图1-3Files标签4. 输入、编辑源程序。
注意不要输入中文标点符号,要及时按 Ctrl+S 保存文件,如图 1-4 所示。
图1-4输入源程序5.编译、连接。
点击“BuildMiniBar”工具栏上的“Build”按钮进行编译、连接。
也可以选择菜单 Build 下的 Build (F7) 菜单项或Rebuild All菜单项。
更简捷的方法是直接按 F7 功能键。
Visual C++将提示创建默认工作区,如图 1-5 所示。
VC++编写ActiveX控件详解
VC++编写ActiveX控件ActiveX这门技术是通过生成“*.ocx”文件来实现的。
先来了解下OCX文件,在百度百科上面对OCX是这样解释的:“.ocx是ocx控件的扩展名,OCX 是对象类别扩充组件。
如果你用过Visual Basic或者Delphi一类的可视化编程工具,那么对控件这个概念一定不会陌生,就是那些工具条上的小按钮,如EditBox,Grid,ImageBox,Timer等等。
每个控件都有自己的事件、方法和属性。
使用了控件的编程非常容易。
首先,在程序的设计阶段可以设置一些属性,如大小,位置,标题(caption)等等;在程序运行阶段,可以更改这些属性,还可以针对不同的事件,调用不同的方法来实现对该控件的控制。
控件就好像一块块的积木,程序要做的事只是将这些积木搭起来。
控件的最大好处是可以重复使用,甚至可以在不同的编程语言之间使用,例如你可以在VB中嵌入用VC开发的控件。
”里面最后一句话比较重要,就是用VC开发的OCX控件,你可以在其它语言里面都能调用,这样很好的实现了功能化组件的良好循环使用,而且还可以实现跨语言地调用(例如,你完全可以用C#调用C++开发的OCX控件)。
下面开始介绍,如何用VC++一步步生成你想要的“*.ocx”文件。
1. 建立最简单的ocx文件并进行调试1.1 建立最简单的ocx文件VC->新建项目->MFC ActiveX WinZard一路点击“确定”,直到点击“完成”。
最后VC++会自动生成一些文件,这些文件就构成了ActiveX的基本模板,文件的主要结构如下:直接编译一下,然后在Debug目录下面就会生成一个名为“ocxDemo.ocx”的控件注册文件,然后利用“regsvr32”命令就可以实现本机对此控件的注册,然后就可以使用本语言或者跨语言编写程序时引用此控件来实现相应的功能(后面将会讲到)。
1.2 ocx调试方法:VC++自带有一个调试控件的工具“ActiveX控件测试容器”,通过三种方式可以打开:1.点击“调试”按钮,会出现如下对话框:然后浏览"C:\Program Files\Microsoft Visual Studio\Common\Tools\TSTCO N32.EXE“2. 系统的“开始“-》“程序”-》“Microsoft Visual C++ 6.0”-》“Microsoft Visual C++ 6.0 Tools”-》“Active Control Test Container”3. VC++开发环境中的“工具”-》“ActiveX Control Test Container”通过上面的任意一种方法,都可以调出下面的程序:右击空白区域,插入控件,然后会弹出下面的对话框:选中指定控件,然后点击确定,控件就被加载到此工具中了,然后可以通过这个工具来看此控件的相关事件响应等等。
第11讲 VC++6.0基本控件的使用
(2)使用有模式对话框 )
方法如下: (a)编辑对话框资源。 在Insert菜单中选择Resource菜单项或直接按下Ctrl+R 加速键,打开Insert Resource对话框,如图1所示。
图1
2011年1月13日1时14分 14
在对话框中选取Dialog图标,然后单击New按钮,这时 将建立一个新的对话框,并打开对话框编辑器,如图 2所示。
2011年1月13日1时14分
9
(4)对话框数据交换和数据检验机制
控件与用户的数据交流和检验机制通过 CDialog::DoDataExchange()函数来完成, 其原型为:virtual void DoDataExchange ( CDataExchange * pDX ); 成员变量的值 与 控件显示的值之间的传递方向由下面 两个函数决定: UpdateData(TRUE); //从对话框到变量 UpdateData(FALSE); //从变量到对话框
2011年1月13日1时14分 16
(3)使用非模态对话框 )
使用非模态对话框的方法如下: (a)首先建立非模态对话框资源和对话框类,与前 (a)和(b)两步一样。 (b)在要用到的类中定义一个成员变量,即一个指向 非模态对话框的指针。 比如:CModLessDlg *m_pModelless; //定义时,需要包含头文件。
2011年1月13日1时14分
2
第11讲 VC++6.0基本控件的使用
2 授课要求 掌握基于对话框结构的程序设计; 1.掌握基于对话框结构的程序设计; 掌握在基于对话框结构的界面上添加菜单; 2.掌握在基于对话框结构的界面上添加菜单; 掌握创建模态对话框和非模态对话框; 3.掌握创建模态对话框和非模态对话框; 熟悉常用控件的使用。 4.熟悉常用控件的使用。
VC++6.0使用教程
运行程序
断点调试程序
断点调试程序 F9
关闭文件和工作区
选择菜单“File\Close WorkSpace”,关闭当前 的工作区和所有打开的文件。
24
VC++6.0 使用教程
1
用VC编写控制台程序
• Microsoft Visual C++(简称VC)是是微 软推出的一款基于其Windows系统C++ 编译器,将“高级语言”翻译为“机器 语言(低级语言)”的程序。VC是一个 功能强大的可视化软件开发工具。
什么是控制台程序?
• 控制台程序(Win32 Console pplication) ,就是能够运行在MS-DOS环境中的程 序。
鼠标左键单击Windows操作系统的“开始” →“程序” →“Microsoft Visual Studio 6.0” →“Microsoft Visual C++ 6.0”
新建
File → New (Ctrl+N)
创建一个新的项目文件
新建工程命名
修改工程存放路径
创建一个空工程
生成一个空工程
VC++6.0的编辑窗口
自动生成的文件和文件夹
工程管理结构
WorkSpace Project
.h 我们一般把自定义数据类型、函数等的定义 和声明放置在头文件中(*c 把相应的实现细节放置在(*.c)文件中
Project
新建C源程序文件
编辑文件
编译源程序
编译源程序
int main() {
/* 向标准输出stdout输出一个字符串 */
printf(“Hello, World!\n”);
用VC6.0开发简单的软件
项目一1、打开VC++6.0,新建工程“计算两点距离”
2、删掉对话框中自带的几个控件——“确定”、“取消”、“TODO :在这里设置对话控制”这几个控件,然后拖拽所需控件并进行布局,如下图所示:
1)、点击菜单栏中的“查看”——“建立类向导”后打开:
2)、选择“Member Variables”选项卡,分别选中“Control IDs”中的五个编辑框ID,然后点击“Add Variables”依次为五个编辑框添加变量m_edit1、m_edit2、
m_edit3、m_edit4、m_edit5:
入界面:
5、然后在OnButton1函数中输入如下代码
m_edit5=sqrt((m_edit1-m_edit3)*(m_edit1-m_edit3)+(m_edit2-m_edit4)*(m_edit 2-m_edit4));
UpdateData(FALSE);//将数据显示在对话框中
注:由于代码中含有sqrt()函数,所以在头文件中要加入一句“#include<math.h>”
6、分别双击显示X、Y坐标的四个编辑框,在其中的函数体内分别加入代码
UpdateData(TRUE);//将输入数据赋给文本框变量。
UpdateData(FALSE);//将内容显示在文本框中
然后编译、连接、运行就可以了,如下图示
请大家关注我的博客“空间地理信息之家”——/s/articlelist_1816470535_0_1.html。
VC++6.0控件使用方法大全
使用Windows标准控件我们在前面曾提到过,控件是一些行为标准化了的窗口,一般用于对话框或其它窗口中充当与用户交互的元素。
在Visual C++中,可以使用的控件分成三类:(1) Windows标准控件Windows标准控件由Windows操作系统提供,在Windows 95中还提供了一些新增的控件。
所有这些控件对象都是可编程的,我们可以使用Visual C++提供的对话框编辑器把它们添加到对话框中。
Microsoft基础类库(MFC)提供了封装这些控件的类,它们列于表6.1。
表6.1 Windows标准控件控件 MFC类 描述动画 CAnimateCtrl 显示连续的AVI视频剪辑按钮 CButton 用来产生某种行为的按钮,以及复选框、单选钮和组框组合框 CComboBox 编辑框和列表框的组合编辑框 CEdit 用于键入文本标题头 CHeaderCtrl 位于某一行文本之上的按钮,可用来控制显示文件的宽度热键 CHotKeyCtrl 用于通过按下某一组合键来很快的执行某些常用的操作图象列表 CImageList 一系列图象(典型情况下是一系列图标或位图)的集合。
图象列表本身不是一种控件,它常常是和其它控件一起工作,为其它控件提供所用的图象列表列表 CListCtrl 显示文本及其图标列表的窗口列表框 CListBox 包括一系列字符串的列表进度 CProgressCtrl 用于在一较长操作中提示用户所完成的进度多格式文本编辑 CRichEditCtrl 提供可设置字符和段落格式的文本编辑的窗口滚动条 CScrollBar 为对话框提供控件形式的滚动条滑块 CSliderCtrl 包括一个有可选标记的滑块的窗口旋转按钮 CSpinButtonCtrl 提供一对可用于增减某个值的箭头静态文本 CStatic 常用于为其它控件提供标签状态条 CStatusBarCtrl 用于显示状态信息的窗口,同MFC类CStatusBar类似续表6.1 控件 MFC类 描述选项卡 CTabCtrl 在选项卡对话框或属性页中提供具有类似笔记本中使用的分隔标签的外观的选项卡工具条 CToolBarCtrl 具有一系列命令生成按钮的窗口,同MFC类CToolBar类似工具提示 CToolTipCtrl 一个小的弹出式窗口,用于提供对工具条按钮或其它控件功能的简单描述树 CTreeCtrl 用于显示一系列的项的继承结构前面提到过,在MFC中,类CWnd是所有窗口类的基类,很自然的,它也是所有控件类的基类。
VC6.0使用手册正确
附录3 Visual C++ 6.0操作手册Visual C++由美国微软公司开发,是Windows平台上流行的C/C++集成开发环境。
从1993年发行1.0版本开始,历经多年锤炼,目前最新的版本是Visual C++2010。
本文介绍如何在VC6.0版本(以下简称VC6)下开发C语言程序。
1. 新建C语言工程VC6的AppWizard(应用向导)并不直接支持生成C语言工程,但是我们可以用以下两种方法来建立新的C语言文件。
方法1:通过向导生成。
选择菜单栏中的File(文件)->New(新建),就会弹出图6-1的向导对话框,选择“Files”选项卡,按照如图所示的选项新建我们需要的C语言文件。
注意:文件类型选择C++ Source File(C++源文件),文件名扩展名必须是“.c”。
扩展名必须是.c选择c++源文件图6-1 新建文件向导方法2:手动新建文件。
打开VC6,点击新建按钮生成一个空的文本文件,如图6-2所示。
当保存时选择扩展名为“.c”文件即可。
如图6-3所示。
点击此“新建”按钮建立空文本文件图6-2使用“新建”按钮建立一个空的文本文件文件扩展名必须是.c点击此按钮保存文件图6-3 保存文件建议读者在新建好文本文件后,就将其保存为C语言的源文件。
这样在对代码进行编辑时,开发环境会用C语言代码版式来处理该文件,对关键字变色并进行适当的缩进。
这样在编写代码的过程中容易检查编码过程中的错误并养成良好的编程习惯。
2. 编译源程序在编写完代码之后,下面就要编译源程序。
按“编译”按钮或者直接按“F7”对程序进行编译。
这时系统将在保存.c 源文件的目录下生成与.c 源文件同名的.dsw 文件和.dsp 文件。
以后可以直接通过这些文件来打开工程继续编写程序。
编译的过程中会在输出窗口输出错误(error)与警告(warning)信息,如果是仅有警告信息,程序可以运行,但可能存在潜在的异常。
图6-4给出了编译相关的命令。
MFC开发ActiveX控件全过程
使用MFC开发ActiveX控件全过程Visual C++是开发ActiveX控件的强大工具,它的特点是开发周期短、便于使用,因此它已经成为开发ActiveX控件的主要工具之一。
Visual C++集成开发环境,使用了微软自己的类库MFC,MFC对开发Ac tiveX控件提供了全面的支持,本文讲述的过程均在Visual C++ 6.0(以下简称VC)中实现。
1、创建工程:对于使用过VC的人,可以很容易地创建一个开发ActiveX控件的工程,没有使用过VC的人,按照下面的操作步骤,也可以很快创建一个同样的工程出来。
第一步:“File”—>“New”—>“(Projects)MFC ActiveX ControlWizard”,在“Project Name”中输入合适的工程名(以test为例),在“Location”中选择工程文件存放路径,然后,“OK”进入下一步;第二步:选择你想在这个工程中生成的ActiveX控件的个数(至少一个),其余选项决定是否生成一些辅助文件,通常按照默认设置即可,“Next”进入下一步;第三步:编辑你的工程中各个类和文件的名称,配置一些辅助选项,可以全部选择默认设置,“Fini sh”进入下一步;第四步:展示向导为你的工程生成的各种配置信息,“Cancel”重新设置不满意的选项,“OK”结束工程的创建。
2、绘制控件:MFC将对ActiveX控件的支持封装在COleControl类中,所有ActiveX控件均从这个类派生。
绘制控件的全部操作则集中在一个虚函数中—OnDraw(),其默认实现如下:void CTestCtrl::OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid){// TODO: Replace the following code with your own drawing code.pdc->FillRect(rcBounds,CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));pdc->Ellipse(rcBounds);}可以看到,OnDraw()函数的默认实现是在矩形rcBounds中绘制一个椭圆,通过改写OnDraw()函数中的内容,就可以绘制自己想要的控件了。
VC6.0常用控件使用方法简单介绍
VC++ 6.0常用控件使用方法介绍*除非特别说明,本文中所用控件变量类型为Cont rol一般控件可用/不可用Enable Windo w(TRUE);Enable Windo w(FALSE);1、Static T ext------------静态控件--类CStat ic取值/赋值(变量类型为C ontro l)m_lbl.GetWin dowTe xt(string);m_lbl.SetWin dowTe xt(string);2、Edit Box---------------编辑控件--类CEdit取值/赋值m_txt.GetWin dowTe xt(string);m_txt.SetWin dowTe xt(string);3、CheckBox------------复选控件--类CButt on(1)设置选中/未选中m_chk.SetChe ck(BST_CH ECKED);m_chk.SetChe ck(BST_UN CHECK ED);(2)判断是否选中int nCur = m_chk.GetChe ck();nCur取值为BST_CH ECKED/BST_UN CHECK ED。
4、RadioBox------------单选控件--类CButto n(1)默认选中第一项m_radi o.SetChe ck(BST_CH ECKED);(2)选中组中任一项CWnd::CheckR adioB uttonvoid CheckR adioB utton(int nIDFir stBut ton, int nIDLas tButt on, int nIDChe ckBut ton);(3)判断哪一项被选中CWnd::GetChe ckedR adioB uttonint GetChe ckedR adioB utton(int nIDFir stBut ton, int nIDLas tButt on);(4)控件变量类型为V alu e时,可通过给in t型变量赋值0、1、2...选中第1、2、3...个选项。
VC6.0添加CMSComm控件的几个问题
当添加1不能添加时:
窗口----->右击鼠标----->Insert Active Controls------->Microsoft Communications Control,version 6.0------->之后手动添加.app及.h文件;
手动添加.app及.h文件: Ctrl+W 打开类项导---->Member Variables --->Add Variable --->OK。
>>> You should call it in your app's InitInstance function.
在其app::InitInstance()中加入AfxEnableControlContainer()
经过1or2后编译后按f5调试运行程运行不起来自动关闭并出现如下错误
VC6.0添加CMSComm控件的几个问题
1、添加1:
Project--->Add To project--->Components and Controls--------->Microsoft visual Studio/common/msdev98/gallery/Registered ActiveX Controls--------->Microsoft Communications Control,version 6.0------->之后自动添加.app及.h文件----->OK。
3、在app::InitInstance()中加入AfxEnableControlContainer()
经过1or2后,编译后,按F5调试运行,程序运行不起来,自动关闭并出现如下错误:
VC++编写ActiveX控件详解good
VC++编写ActiveX控件VC++编写ActiveX控件ActiveX这门技术是通过生成“*.ocx”文件来实现的。
先来了解下OCX文件,在百度百科上面对OCX是这样解释的:“.ocx是ocx控件的扩展名,OCX 是对象类别扩充组件。
如果你用过Visu al Basic或者Delphi一类的可视化编程工具,那么对控件这个概念一定不会陌生,就是那些工具条上的小按钮,如EditBox,Grid,ImageBox,Timer等等。
每个控件都有自己的事件、方法和属性。
使用了控件的编程非常容易。
首先,在程序的设计阶段可以设置一些属性,如大小,位置,标题(caption)等等;在程序运行阶段,可以更改这些属性,还可以针对不同的事件,调用不同的方法来实现对该控件的控制。
控件就好像一块块的积木,程序要做的事只是将这些积木搭起来。
控件的最大好处是可以重复使用,甚至可以在不同的编程语言之间使用,例如你可以在VB中嵌入用VC开发的控件。
”里面最后一句话比较重要,就是用VC开发的OCX控件,你可以在其它语言里面都能调用,这样很好的实现了功能化组件的良好循环使用,而且还可以实现跨语言地调用(例如,你完全可以用C#调用C++开发的OCX控件)。
下面开始介绍,如何用VC++一步步生成你想要的“*.ocx”文件。
1. 建立最简单的ocx文件并进行调试1.1 建立最简单的ocx文件VC->新建项目->MFC ActiveX WinZard一路点击“确定”,直到点击“完成”。
最后VC++会自动生成一些文件,这些文件就构成了ActiveX的基本模板,文件的主要结构如下:直接编译一下,然后在Debug目录下面就会生成一个名为“ocxDemo.ocx”的控件注册文件,然后利用“regsvr32”命令就可以实现本机对此控件的注册,然后就可以使用本语言或者跨语言编写程序时引用此控件来实现相应的功能(后面将会讲到)。
1.2 ocx调试方法:VC++自带有一个调试控件的工具“ActiveX控件测试容器”,通过三种方式可以打开:1.点击“调试”按钮,会出现如下对话框:然后浏览"C:\Program Files\Microsoft Visual Studio\Common\Tools\TSTCO N32.EXE“2. 系统的“开始“-》“程序”-》“Microsoft Visual C++ 6.0”-》“Mi crosoft Visual C++ 6.0 Tools”-》“Active Control Test Container”3. VC++开发环境中的“工具”-》“ActiveX Control Test Container”通过上面的任意一种方法,都可以调出下面的程序:Failed to create control 未指定错误控件本文指的是vc++项目的activex出现这个问题, 我总结了总共有以下几点,可能还有其他原因:1.中文问题:如果你的项目类型是多字节的,而不是unicode编码的,你可能要注意这个问题了,我就发生了这个问题,为了解决这个问题没办法项目重新生成然后一个一个去排除,结果发现在 "copyright 公司名称(C)"的地方多了一个公司名称,是我自己手动加上去的,结果就是这个说明给搞的不能运行2.acticex运行时需要其他的dll库没有在同一个目录下,或者没有在system32下都会导致这个问题3.运行时许可导致,lic文件丢失.在新建项目的时候如果选中了"运行时许可"这个选项那么在你的项目中会产生一个lic文件,这个文件如果没有一起打包也会导致出现这个问题!右击空白区域,插入控件,然后会弹出下面的对话框:(自己建立的My1.Con trol和Oxce.Control和Ocxdemo.Control看看可以怎么删掉)选中指定控件,然后点击确定,控件就被加载到此工具中了,然后可以通过这个工具来看此控件的相关事件响应等等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
打开VC++ 6.0
File -->New-->Projects-->MFC ActiveX ControlWizard
点击ClassView视图右击_DTest -->Add Method
方法名为ddd 参数为a
TestCtl.cpp:
short CTestCtrl::ddd(short a)
{
// TODO: Add your dispatch handler code here
return a;
}
Test.odl:
点击build-->Rebuild All
即可生成ocx文件
注册ocx文件:cmd -->regsvr32 +ocx文件的路径
解注册ocx文件:cmd -->regsvr32 /u +ocx文件的路径
Test.html:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
<script type="text/javascript" language="javascript">
/**
*测试OCX
*/
function testOCX(){
alert("进入");
var ocx=document.getElementById("pos");
alert(ocx);
var t=ocx.ddd(14);
alert(t);
}
</script>
</head>
<body>
<!--clsid : 如果控件成功注册到本机后,这个值在本机注册表中可以找到,js获取控件对象就是通过这个来找的。
-->
<OBJECT name="xn_pos" ID="pos" WIDTH="0" HEIGHT="0" CLASSID="CLSID:9D2544C5-EA1B-4CAF-B20A-00AADD135EE6"
codebase="test.ocx"></OBJECT>
<input type="button" value="测试OCX" onclick="testOCX();" />
</body>
</html>
如何在ocx文件中调用dll,目前还没解决......。