MFC OCX 事件 / 属性 / 接口参数相关小结

1、事件

1.1 事件的添加

控件的事件一般都是由对外的接口引发。事件应该是属于窗口的,所以在Ctrl类上单击右键-》添加。

  事件函数的名字就是事件名称,参数就是在添加事件时候设置的参数。控件里边通过参数将结果给了事件函数,从而将值传出。

参考链接:http://blog.csdn.net/wd_cloud/article/details/40893033

1.2 子线程中事件的触发传出

   //define   a   custom   message:   
      a)     #define   WM_THREADFIREEVENT   WM_USER+101   

    b) ON_MESSAGE(WM_THREADFIREEVENT,OnFireEventForThread)   //custom   handler   

     c)  LRESULT   CFireeventCtrl::OnFireEventForThread(WPARAM   wParam,  LPARAM   lParam)   
        {   
               FireLengthyProcessDone();   
               return   TRUE;   
        }   

    d)  线程内:PostMessage(pCtrl->m_hWnd, WM_THREADFIREEVENT,  (WPARAM)NULL, (LPARAM)NULL);   

    上述的hWnd,如果在IE使用空间,这个窗口句柄是空的,会导致回调照样失败,这时候需要重载OnSetClientSize。   

    e)  void CMyControl::OnSetClientSite()
      {
    // It doesn‘t matter who the parent window is or what the size of
    // the window is because the control‘s window will be reparented
    // and resized correctly later when it‘s in-place activated.
    if (m_pClientSite)
         VERIFY (CreateControlWindow (::GetDesktopWindow(), CRect(0,0,0,0), CRect(0,0,0,0)));
    COleControl::OnSetClientSite();
   }

参考链接:http://www.cnblogs.com/lidabo/archive/2012/12/12/2815059.html

           https://support.microsoft.com/en-us/help/200839/how-to-enable-activex-control-event-handling-on-a-web-page

2、接口参数

2.1 byte[]数组的传递:SAFEARRAY - > VARIANT

///将图像内存数据封装为接口需要的VARIANT类型
VARIANT pImgBuffer;
SAFEARRAY *psa = NULL;
SAFEARRAYBOUND rgsabound;

VariantInit(&pImgBuffer);
rgsabound.cElements = bytes;
rgsabound.lLbound = 0;
psa = SafeArrayCreate(VT_UI1, 1, &rgsabound);
if ( psa == NULL )
    return; 

BYTE *pBitmapData = NULL;    //new BYTE[bytes];(不需要new)
SafeArrayAccessData(psa, (void **)&pBitmapData);
memcpy(pBitmapData, tempBuffer, bytes);
///将SAFEARRAY放入VARIANT中,并设置类型
pImgBuffer.vt = VT_ARRAY | VT_UI1;
SafeArrayCopy(psa, &pImgBuffer.parray);
 SafeArrayUnaccessData(psa); 

//这里也就不需要使用delete释放pBitmapData所指向的空间 //YOUR_INTERFACE(pImgBuffer/*VARIANT*/, img.GetHeight(),
img.GetWidth()); 

if ( tempBuffer )
     delete[] tempBuffer;
 tempBuffer = NULL;
SafeArrayDestroy(psa);

c++调用中参数封装

//VARIANT* pPixArray;(接口参数)
unsigned char* pBuffer = NULL;
SafeArrayAccessData(pPixArray.parray, (void**)&pBuffer);
///此处使用pBuffer所指向的数据
SafeArrayUnaccessData(pPixArray.parray);
HRESULT ret = VariantClear(&pPixArray);

ocx接口内实现

FileInfo fi = new FileInfo("GrayPixelsBuf");
byte[] buf = new byte[fi.Length];
FileStream fs = fi.OpenRead();
fs.Read(buf, 0, Convert.ToInt32(fs.Length));
fs.Close();
////buf传递给ocx////////

c#中数据传递

参考链接:http://blog.csdn.net/xdg_blog/article/details/53169852

时间: 2024-08-29 22:43:13

MFC OCX 事件 / 属性 / 接口参数相关小结的相关文章

wpf(Application 如何创建一个事件,及其Application相关的属性)

1.如何关闭wpf程序.应用程序的关闭只有调用其shutdown方法才可以.shutdown有三种属性.OnLastWindowClose,OnMainWindowClose,OnExplicitShutdown 1)通过在App.xaml中直接设置.shutdown="OnExplicitShutdown": 2)第二种方式:删除App.xaml文件,自己创建一个App.cs类,在main方法中: (建立Application对象,建立win窗体对象略) app.shutdown=s

C#控件事件属性大全

C#控件及常用设计整 1.窗体... 1 2.Label 控件... 3 3.TextBox 控件... 4 4.RichTextBox控件... 5 5.NumericUpDown 控件... 7 6.Button 控件... 7 7.GroupBox 控件... 7 8.RadioButton控件... 8 9.CheckBox 控件... 8 10.ListBox 控件... 9 11.ComboBox 控件... 10 12.CheckedListBox 控件... 10 13.Pict

SpringBoot实现通用的接口参数校验

本文介绍基于Spring Boot和JDK8编写一个AOP,结合自定义注解实现通用的接口参数校验. 缘由 目前参数校验常用的方法是在实体类上添加注解,但对于不同的方法,所应用的校验规则也是不一样的,例如有一个AccountVO实体: publicclassAccountVO{privateStringname;//姓名privateIntegerage;//年龄} 假设存在这样一个业务:用户注册时需要填写姓名和年龄,用户登陆时只需要填写姓名就可以了.那么把校验规则加在实体类上显然就不合适了. 所

JS中的事件类型和事件属性的基础知识

周末无聊, 这几天又复习了下JS搞基程序设计3, 想着好记性不如浪笔头哇, 要么把这些东西写下来, 这样基础才能更加扎实么么哒, 知道的同学也可以直接过一下,当做复习,  小姨子再也不用担心我的学习啦: 从哪里开始呢?????? ??????? 事件的类型 DOM3规定了下面这几事件类型: UI事件:onload,resize,scoll等等; 焦点事件: 鼠标事件: 滚轮事件: 文本事件: 键盘事件: 变动事件:(用的也少): 变动名称事件,当元素的属性名发生改变的时候触发(没啥用, 要弄编辑

js的事件属性方法一览表

event对象常用属性和方法 event 对象用来表示当前事件,事件有很多状态,例如,鼠标单击时的位置,按下键盘时的按键,发生事件的HTML元素,是否执行默认动作,是否冒泡等,这些都是作为event对象的属性和方法存在的.要想获得相应的状态,就要访问对应的属性和方法. event 对象常用属性和方法(W3C规范) 属性 描述 IE 非IE W3C altKey 返回当事件被触发时,"ALT" 是否被按下. Yes Yes Yes button 返回当事件被触发时,哪个鼠标按钮被点击.

C#事件与接口编程实例

很多初学c#的朋友对于事件与接口感到迷惑不解,不明白它们之间的关系,下面我就用实例来简单的分析讲解一下. 事件,用event修饰符来代表一个事件,我们要创建一个C#事件必须按以下顺序来扫行: 1,创建或标识一个代表.比如下例中的public delegate void dele(); //声明代表,delegate 关键字通知编译器 dele 是一个委托类型 2,创建一个包含事件处理代表,调用事件处理代表的方法的类,如下例 public class EventClass1 : IEvents /

HTML的事件属性

全局事件属性 HTML 4 增加了使事件在浏览器中触发动作的能力,比如当用户点击元素时启动 JavaScript.当在HTML5中有了更多新属性,但是对HTML4的兼容性却没有达到全部. 下面列出了添加到 HTML 元素以定义事件动作的全局事件属性. Window 事件属性 针对 window 对象触发的事件(应用到 <body> 标签): 属性 值 描述 onafterprint script 文档打印之后运行的脚本. onbeforeprint script 文档打印之前运行的脚本. on

HTML 事件属性(下)

HTML 事件属性(下) 一:键盘事件 (Keyboard Events)二:鼠标事件 (Mouse Events) 一:键盘事件 (Keyboard Events)在下列元素中无效:base.bdo.br.frame.frameset.head.html.iframe.meta.param.script.style 以及 title 元素.属性 值 描述 onkeydown 脚本 当键盘被按下时执行脚本 onkeypress 脚本 当键盘被按下后又松开时执行脚本 onkeyup 脚本 当键盘被

HTML 事件属性

HTML 事件属性 事件:当用户点击某个 HTML 元素时启动一段 JavaScript New标记为HTML5新增属性事件. 窗口事件属性(Window Event Attributes) 由窗口触发该事件 (适用于 <body> 标签): 属性 值 描述 onafterprintNew script 在打印文档之后运行脚本 onbeforeprintNew script 在文档打印之前运行脚本 onbeforeonloadNew script 在文档加载之前运行脚本 onblur scri