[MFC][ActiveX] 开发点滴

来源:互联网 发布:2017中国网民数据统计 编辑:程序博客网 时间:2024/04/29 16:41

 最近,为了配合网站的一项活动,需要开发一款IE的插件(ActiveX),完成图像截图,上传等功能,开发过程也算顺利。但还是有必要把其中几个问题记录一下。

    控件的状态:
      现在很多开发软件都支持“所见即所得”的开发,用于设计UI。再设计ActiveX时,应注意在代码中区分设计时和运行时的状态。如可能在设计时,就不响应鼠标双击等消息。否则可能导致开发环境崩溃。
      可以使用:
            if(AmbientUserMode())
            {
            //运行时代码
            }

    Static控件的消息:
      Windows的开发,一切以“窗口”这一基本概念开始,即Static控件也是一个窗口。故我做一些自定义控件时,有时候即继承CStatic来实现。这时值得一提的是,在Static控件默认的消息处理机制中用样式定义,默认对个别消息(鼠标消息)进行了屏蔽,即不接收。一般解决的办法可以采用重载 CStatic的PreSubclassWindow函数,代码可能类似:

            void Ui_Control::PreSubclassWindow()
            {
            DWORD dwStyle = this->GetStyle();
            ::SetWindowLong(this->m_hWnd,GWL_STYLE, dwStyle | SS_NOTIFY);//加入SS_NOTIFY,控件将会发送通知消息如WM_LBUTTONDOWN等
            CStatic::PreSubclassWindow();
            }

    COleControl的键盘输入:
      与Static类似,COleControl在类中默认不接收键盘输入。加入你要开发一款需要键盘输入的控件,可以处理WM_GETDLGCODE消息,并在处理函数中返回相应的键盘输入的常量即可,如:
         
           UINT CPassCtrl::OnGetDlgCode()
            {
            //返回值指定了空间接收的键盘输入的按键类型
            return DLGC_WANTCHARS|DLGC_WANTARROWS;
            }

      具体常量定义及含义请查询MSDN。

原创粉丝点击