Development of ActiveX Controls

zhaozj2021-02-17  51

Development of ActiveX Controls

During this time, because of the needs of the work, an ActiveX control has been developed. The development tool used is VC, I hope to provide a reference to everyone to do a similar development.

First, the function of the ActiveX control:

1. Mainly used to download and save the specified web page.

2. To be able to be embedded in the web page, the script call for the server page.

3. Provide a window that is saved to which folder to give the user yourself to save the location.

4. Provide program interfaces such that users can save a single file.

5. Provide a program interface that allows the user to save multiple files, and the file name is passed in an array.

Second, the development process of ActiveX control:

1. Develop this control through the MFC ActiveX ControlWizard Wizard Wizard, name the project to ActiveX3

2, hook the Invisible At Runtime in the wizard and remove the hook in front of the HAS AN "About" Box, which is not displayed when calling.

3, open ClassWizard, add the method under Automation:

(1) External name: DownloadSingle

INTERNAL NAME: DownloadSingle

Return Type: BOOL

Parameter List: STRDOWNLOAD LPCTSTR

The method of this method: accepts and handles parameters to download requests for string types, while providing operators with the chance to specify download directory and accept it.

(2) External name: DownloadArray

Internal Name: Downloadarray, INTERNLOADARRAY

Return Type: BOOL

Parameter List: ArrdownLoad Variant

The method of this method: accepts and handles the download request for the parameter string array type, and provides the operator with the chance to specify the download directory and accept it.

4, add the method by manual:

Void Tryurl (CString straddress)

Calling by Downloadarray and DownloadSingle to implement specific download functions.

Third, key code

1, BOOL CACTIVEX3CTRL :: DownloadSingle (LPCTSTR STRDOWNLOAD)

{

// Todo: Add Your Dispatch Handler Code Here

Char buf [max_path];

_Getcwd (buf, max_path);

Location = "d: //";

Tryurl (strDownload);

MessageBox ("Download Details!");

Return True;

}

2, Bool Cactivex3ctrl :: DownloadArray (Const Variant Far & Arrdownload)

{

// Todo: Add Your Dispatch Handler Code Here

Char buf [max_path];

_Getcwd (buf, max_path);

Location = "d: //";

Const Variant * Vararray;

IF (arrdownload.vt == (vt_variant | vt_byref))

{

Vararray = arrdownload.pvarval;

}

Else

{

Vararray = & arrdownload;

}

IF ((Vararray-> VT) == (vt_array | vt_byref | vt_variant))))

{

VARIANT * STRARRAY;

SafeArray * psa = * (Vararray-> PPARRAY);

SafearrayAccessData (PSA, (void **) & stratay;

UINT UDIM = SafeArraygetdim (PSA);

IF (udim == 1)

{

Long llbound, lrbound;

SafeArraygetlbound (PSA, 1, & LLBOUND);

SafeArraygetubound (PSA, 1, & LRBOUND);

For (long i = llbound; i <= lrbound; i )

{

IF (Strarray [i] .vt == vt_bstr)

{

Tryurl (strrray [i] .bstrval);

}

}

}

SafeArrayunaccessData (PSA);

}

MessageBox ("Download Details!");

Return True;

}

3, Void Cactivex3ctrl :: Tryurl (CString straddress)

{

CFILE NEWFILE;

CString filename = straddress.mid (straddress.reversefind ('/') 1);

Newfile.open (Location "//" filename, cfile :: modecreate | cfile :: modewrite;

CinternetSession session;

CinternetFile * file = NULL;

Try

{

File = (CinternetFile *) session.openurl (straddress);

Catch (CinternetException * PEX)

{

File = NULL;

PEX-> delete ();

}

IF (file)

{

INT number = 0;

BYTE * BUF;

BUF = New byte [1024];

DO

{

Number = file-> read (buf, 1024);

Newfile.write (buf, number);

}

While (NUMBER> 0);

DELETE [] BUF;

}

File-> close ();

Newfile.close ();

Return;

}

Fourth, test page

Download Three Files from The Web. </ Title></p> <p><script language = "javascript"></p> <p>Function Download1 ()</p> <p>{</p> <p>Var file;</p> <p>File = Document.form1.text1.value;</p> <p>Favoritedown.DownloadSingle (file);</p> <p>Return;</p> <p>}</p> <p></ script></p> <p><script language = "vbscript"></p> <p><! -</p> <p>Sub Down_ONCLICK</p> <p>DIM S (2)</p> <p>s (0) = Document.form1.text1.Value</p> <p>s (1) = Document.form1.text2.Value</p> <p>s (2) = document.form1.text3.Value</p> <p>ActivexDown.downloadArray (s)</p> <p>End Sub</p> <p>-></p> <p></ script></p> <p></ hEAD></p> <p><body></p> <p><Object ID = "ActiveXDown"</p> <p>ClassID = "CLSID: ADD73828-78F4-4ef1-8734-61590b044f87"</p> <p>Codebase = "ActiveX3.ocx # Version = 1, 0, 0, 0"></p> <p></ Object></p> <p><center></p> <p><form name = "form1"></p> <p><Input Type = "text" name = "text1" size = "50"> <p></p> <p>Download a file: <input type = "button" name = "DOWN1" value = "DOWN1" οnclick = "javascript: Download1 ();"> <p></p> <p><Input Type = "text" name = "text2" size = "50"> <p></p> <p><Input Type = "text" name = "text3" size = "50"> <p></p> <p>Download three files: <input type = "button" name = "Downn" value = "Downn"> <p></p> <p></ form></p> <p></ body></p> <p></ html></p></div><div class="text-center mt-3 text-grey"> 转载请注明原文地址:https://www.9cbs.com/read-28660.html</div><div class="plugin d-flex justify-content-center mt-3"></div><hr><div class="row"><div class="col-lg-12 text-muted mt-2"><i class="icon-tags mr-2"></i><span class="badge border border-secondary mr-2"><h2 class="h6 mb-0 small"><a class="text-secondary" href="tag-2.html">9cbs</a></h2></span></div></div></div></div><div class="card card-postlist border-white shadow"><div class="card-body"><div class="card-title"><div class="d-flex justify-content-between"><div><b>New Post</b>(<span class="posts">0</span>) </div><div></div></div></div><ul class="postlist list-unstyled"> </ul></div></div><div class="d-none threadlist"><input type="checkbox" name="modtid" value="28660" checked /></div></div></div></div></div><footer class="text-muted small bg-dark py-4 mt-3" id="footer"><div class="container"><div class="row"><div class="col">CopyRight © 2020 All Rights Reserved </div><div class="col text-right">Processed: <b>0.037</b>, SQL: <b>9</b></div></div></div></footer><script src="./lang/en-us/lang.js?2.2.0"></script><script src="view/js/jquery.min.js?2.2.0"></script><script src="view/js/popper.min.js?2.2.0"></script><script src="view/js/bootstrap.min.js?2.2.0"></script><script src="view/js/xiuno.js?2.2.0"></script><script src="view/js/bootstrap-plugin.js?2.2.0"></script><script src="view/js/async.min.js?2.2.0"></script><script src="view/js/form.js?2.2.0"></script><script> var debug = DEBUG = 0; var url_rewrite_on = 1; var url_path = './'; var forumarr = {"1":"Tech"}; var fid = 1; var uid = 0; var gid = 0; xn.options.water_image_url = 'view/img/water-small.png'; </script><script src="view/js/wellcms.js?2.2.0"></script><a class="scroll-to-top rounded" href="javascript:void(0);"><i class="icon-angle-up"></i></a><a class="scroll-to-bottom rounded" href="javascript:void(0);" style="display: inline;"><i class="icon-angle-down"></i></a></body></html><script> var forum_url = 'list-1.html'; var safe_token = 'FiuvvTeAfXfljX5YGD_2BfFRr6YtlmKzByRCTtSZtzDB3n32DCOgbXccTo4Bc4c1j3ZY5ckKHFDAwBD8QP5erIiQ_3D_3D'; var body = $('body'); body.on('submit', '#form', function() { var jthis = $(this); var jsubmit = jthis.find('#submit'); jthis.reset(); jsubmit.button('loading'); var postdata = jthis.serializeObject(); $.xpost(jthis.attr('action'), postdata, function(code, message) { if(code == 0) { location.reload(); } else { $.alert(message); jsubmit.button('reset'); } }); return false; }); function resize_image() { var jmessagelist = $('div.message'); var first_width = jmessagelist.width(); jmessagelist.each(function() { var jdiv = $(this); var maxwidth = jdiv.attr('isfirst') ? first_width : jdiv.width(); var jmessage_width = Math.min(jdiv.width(), maxwidth); jdiv.find('img, embed, iframe, video').each(function() { var jimg = $(this); var img_width = this.org_width; var img_height = this.org_height; if(!img_width) { var img_width = jimg.attr('width'); var img_height = jimg.attr('height'); this.org_width = img_width; this.org_height = img_height; } if(img_width > jmessage_width) { if(this.tagName == 'IMG') { jimg.width(jmessage_width); jimg.css('height', 'auto'); jimg.css('cursor', 'pointer'); jimg.on('click', function() { }); } else { jimg.width(jmessage_width); var height = (img_height / img_width) * jimg.width(); jimg.height(height); } } }); }); } function resize_table() { $('div.message').each(function() { var jdiv = $(this); jdiv.find('table').addClass('table').wrap('<div class="table-responsive"></div>'); }); } $(function() { resize_image(); resize_table(); $(window).on('resize', resize_image); }); var jmessage = $('#message'); jmessage.on('focus', function() {if(jmessage.t) { clearTimeout(jmessage.t); jmessage.t = null; } jmessage.css('height', '6rem'); }); jmessage.on('blur', function() {jmessage.t = setTimeout(function() { jmessage.css('height', '2.5rem');}, 1000); }); $('#nav li[data-active="fid-1"]').addClass('active'); </script>