最近在学习OLE,每当弹出一个COleInsertDialog对话框时,可以Create New 一个Object Type。我每次看到这些Object Type 对象时都在想,COleInsertDialog是怎么知道一个程序可以做个被嵌入的。查看源码时,COleInsertDialog却直接调用了OleUIInsertObject,什么也看不到。我想,在将程序做为可以被嵌入的的对象时,可能在注册表里写下了某些东西。于是开始在注册表里找跟CLSID和ProgID相关的东西(手上刚好有一个Ole server的代码),终于发现了点东西。
跟注注册表里的两个键值有关,
HKLM/SOFTWARE/你的程序ProID/Insertable
HKLM/SOFTWARE/你的程序ProID/protocol/StdFileEditing/server
当删除Insertable和serve键r时,就不能通过COleInsertDialog来嵌入相应的程序,因为在COleInsertDialog中不会再显示对应程序的ProID。可见,COleInsertDialog进行的判断跟这两个键还是有关系的。