none
动态创建ImageList Control不成功 RRS feed

  • 问题

  • 我在一个View(非CFormView)内动态创建了一个ImageList Control,请注意,不是CImageList,而是Microsoft ImageList Control 6.0(SP6),该控件由mscomctl.ocx实现。

    代码如下:
    CImageListControl imagelist;
    if( imagelist.Create(NULL,WS_CHILD,CRect(0,0,0,0),this,X_IMAGELIST_CONTROL_ID,
     NULL,FALSE,NULL) && InitImageList(imagelist))
    {
      IDispatch *pDispatch;
      imagelist.GetControlUnknown()->QueryInterface(IID_IDispatch,(void**)&pDispatch);
      m_taskPanel.SetImageList(pDispatch);
      pDispatch->Release();
    
      m_taskPanel.SetIconSize(16,16);
    }
    


    在我自己开发用的电脑上,没有出现任何问题。但是当我将程序拷贝到其他电脑上执行时,发现imagelist未创建成功。而且能确定是imagelist.Create失败了,后面的InitImageList函数根本没有执行。
    经过检查,确定控件在客户电脑上已经注册,并且程序也已经调用了AfxOleInit();

    然后,我怀疑是否License的问题,于是在客户电脑的注册表中登记了如下项(Windows Common Controls 6.0 license key):
    HKEY_CLASSES_ROOT\Licenses\ED4B87C4-9F76-11d1-8BF7-0000F8754DA1
    @=knlggnmntgggrninthpgmnngrhqhnnjnslsh
    结果还是不能创建。

    然后我将imagelist.Create的最后一个参数从NULL改为L"knlggnmntgggrninthpgmnngrhqhnnjnslsh",这样在我自己的电脑上都不行了。

    现在求助各位前辈,我怎么样才能成功创建这个ImageList Control?程序的View非FormView,所以不能通过资源进行创建。
    拜托,谢谢!

    MaRs``
    2010年7月11日 10:10

答案

全部回复

  • 或许可以调用GetLastError看看
    • 已标记为答案 Nancy Shao 2010年7月21日 3:35
    2010年7月11日 11:33
  • 您的MSCOMCTL.OCX版本可能已经过期,确认您使用的控件版本是同您的应用程序一起提供的。
    2010年7月11日 11:36
  • 不好意思,也不知道怎么就解决了。不过可以确定的是,确实需要在注册表内增加Licenses记录。
    我想问一下,是否有不需要操作注册表,直接在Create时传递License字符串的方法(创建mscomctl activex)?

    MaRs``
    2010年7月12日 2:27