• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > COM的属性页的实现……

COM的属性页的实现……

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了 COM的属性页的实现……等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: COM的属性页的实现……
描述:

现在不会,请高手相助,有源程序,如肯帮忙,发个信到sqjlxj@163.com,回复时我给带上源程序。如能解决,给100分。小弟初涉组件对象模型编程,如果那位大侠能指点一二,让小弟有所提高,小弟再送100分。


解决方案1:

发了,收到没有?

解决方案2:

显示属性页
若要显示此页,需要创建一个简单的帮助器对象。帮助器对象将提供一个方法,该方法简化 OleCreatePropertyFrame API 以显示与单个对象连接的单个页。此帮助器将被设计为可以从 Visual Basic 中使用。
使用“添加类”对话框和 ATL 简单对象向导生成一个新类,并将 Helper 用作其简称。一旦创建,就照下表所示添加一个方法。
项值
方法名称ShowPage
参数[in] BSTR bstrCaption, [in] BSTR bstrID, [in] IUnknown* pUnk
bstrCaption 参数是将作为对话框标题显示的标题。bstrID 参数是表示要显示的属性页的 CLSID 或 ProgID 的字符串。pUnk 参数是属性将由该属性页配置的对象的 IUnknown 指针。
按如下所示实现该方法:
STDMETHODIMP CHelper::ShowPage(BSTR bstrCaption, BSTR bstrID,
                               IUnknown* pUnk)
{
    if (!pUnk)
        return E_INVALIDARG;
    // First, assume bstrID is a string representing the CLSID 
    CLSID theCLSID = {0};
    HRESULT hr = CLSIDFromString(bstrID, &theCLSID);
    if (FAILED(hr))
    {
        // Now assume bstrID is a ProgID
        hr = CLSIDFromProgID(bstrID, &theCLSID);
        if (FAILED(hr))
            return hr;
    }
    // Use the system-supplied property frame
    return OleCreatePropertyFrame(
        GetActiveWindow(),   // Parent window of the property frame
                0,           // Horizontal position of the property frame
                0,           // Vertical position of the property frame
                bstrCaption, // Property frame caption
                1,           // Number of objects
                &pUnk,       // Array of IUnknown pointers for objects
                1,           // Number of property pages
                &theCLSID,   // Array of CLSIDs for property pages
                NULL,        // Locale identifier
                0,           // Reserved - 0
                NULL         // Reserved - 0
                );
}

解决方案3:

重写 IPropertyPageImpl::Apply
当用户要将他们的更改应用到对象时,属性页站点将调用 Apply 方法。在此处执行与 Activate 中的代码相反的工作,Activate 是从对象中获取值并将它们推到属性页上的控件中,而 Apply 却从属性页上的控件中获取值并将它们推到对象中。
STDMETHOD(Apply)(void)
{
   // If we don't have any objects, this method should not be called
   if (!m_ppUnk)
      return E_UNEXPECTED;
   // Use Apply to validate the user's settings and update the objects'
   // properties
   // Check whether we need to update the object
   // Quite important since standard property frame calls Apply
   // when it doesn't need to
   if (!m_bDirty)
      return S_OK;
   
   HRESULT hr = E_UNEXPECTED;
   // Get a pointer to the document
   CComQIPtr<EnvDTE::Document> pDoc(m_ppUnk[0]);
   if (!pDoc)
      return hr;
   
   // Get the read-only setting
   VARIANT_BOOL bReadOnly = IsDlgButtonChecked(IDC_READONLY) ? VARIANT_TRUE : VARIANT_FALSE;
   // Get the file name
   CComBSTR bstrName;
   if (!GetDlgItemText(IDC_NAME, bstrName.m_str))
      return E_FAIL;
   // Set the read-only property
   if (bReadOnly != m_bReadOnly)
   {
      hr = pDoc->put_ReadOnly(bReadOnly);
      if (FAILED(hr))
      return hr;
   }
   // Save the document
   if (bstrName != m_bstrFullName)
   {
      EnvDTE::vsSaveStatus status;
      hr = pDoc->Save(bstrName, &status);
      if (FAILED(hr))
      return hr;
   }
   // Clear the&nb

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 2017-06-04 activex控件的多接口问题
  • 2017-06-04 如何在VC中实现BSTR与CString之间的转换?求助!
  • 2017-06-05 ATL调用Word打开文本文件为何失败????
  • 2017-06-05 关于全局钩子的一些问题,答者有分,up有分,通通有分!
  • 2017-06-04 怎么开始IE开发?
  • 2017-06-04 在ActiveX里怎么获取combobox下拉改变值?
  • 2017-06-04 有关MSComm脱离VC环境运行的问题!
  • 2017-06-04 请问,有没有哪位大哥大姐用过GpsViewer,小弟最近在模做这软件!很多地方不太懂怎么编写!求教谢谢!所用语言VC++
  • 2017-06-04 再问:关于使用CoInitializeEx()函数?
  • 2017-06-04 容器知识求助

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 关于给AdobeAcrobatReader加插件的问题,高分求救!
    • 急!关于Explorer右键菜单,不是载入,是关于分离Dll
    • 请教:多线程下刷新Bitmap的问题
    • 能给一个用vc编写的com程序吗,能说明问题就行?
    • windowexternal调用IEsideband(侧边栏)插件函数的问题
    • ATL自动生成的双端口编译出错大哥们帮我看看啊
    • 如何传递一个结构体从VCCOM组件-〉NETVB程序???
    • 使用第三方的插件后怎么打包发布程序
    • VC写网络摄像头驱动程序
    • 请问如何让webbrowser中的flash响应回车键

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有