正在阅读:深入编程:控制面板知多少(上)深入编程:控制面板知多少(上)

2004-05-18 14:44 出处:CSDN 作者:ZQGet 责任编辑:linjixiong
2 1 00004B33 DebugMain      3 2 00004B30 DllRegisterServer      3 3 00004A27 DllUnregisterServer   从上面的测试结果你看到了什么,我认为至少有两点:      1、 CPL文件就是一个DLL文件      2、 CPL文件都导出了一个CPLApplet函数      这两点揭开了控制面板程序的神秘面纱,你不会再对控制面板程序是什么感到疑惑了,其实,控制面板程序就是一个须导出CPLApplet函数的DLL文件,只是挂上了CPL的后缀名而已。既然都要导出CPLApplet函数,可以想象CPLApplet这个函数的重要性,其实,不光是控制面板,只要是想加载CPL文件的其他所有应用程序都必须取得CPLApplet函数的地址然后通过调用该函数来完成相应得功能的,以下是我从MSDN得来的关于它的声明,详细信息请参考MSDN.      LONG APIENTRY CPlApplet(   HWND hwndCPl,   UINT uMsg,   LONG lParam1,   LONG lParam2   );   参数的意义   hwndCPl 激活控制面板组件应用程序的窗口句柄   uMsg 外界传入的控制消息,CPLApplet函数就是通过该消息去完成   相应的任务的   lParam1 消息参数1   lParam2 消息参数2   CPLApplet函数可以接受的控制消息一览表:      消息 描述      ━━━━━━━━━━━━━━━      CPL_INIT CPL程序收到的第一个消息,在这儿通常完成控制面板组件数据及变量的初始化工作      CPL_GETCOUNT CPLApplet函数在继CPL_INIT消息之后收到的第二个消息,它使得CPLApplet函数返回该CPL文件所包含的控制面板组件数目      CPL_INQUIRE CPL_INQUIRE及下一个要介绍的CPL_NEWINQUIRE消息是所有控制面板程序的消息中最重要的两个消息,可以这样说控制面板就是利用这两个消息来取得每个组件的名称、描述及图标等信息。CPL_INQUIRE会将组件信息填入TCPLInfo的结构中,TCPLInfo结构的声明如下:      typedef struct tagCPLINFO {   int idIcon;   int idName;   int idInfo;   LONG lData;   } CPLINFO;   typedef tagCPLINFO TCPLInfo;   然后你的程序就可以利用LoadString,LoadIcon(这个API      函数已被LoadImage函数取代,不过你还是可以用)等API      函数来取得相应的信息      CPL_NEWINQUIRE      CPL_NEWINQUIRE与CPL_INQUIRE消息所完成的功能差不多,但它会将组件信息填入TNewCPLInfo结构而不是TCPLInfo结构中,一看名称就知CPL_NEWINQUIRE较CPL_INQUIRE后出来,按照常规的思维一般应优先选择后出来得的即使用CPL_NEWINQUIRE,但这是一个例外,TNewCPLInfo结构虽较TCPLInfo更为完整,但它所包含的资料无法缓存,所以使用TNewCPLInfo会使开启控制面板的速度减慢,这也是微软文件上注明着”除非必要,否则请尽量以CPL_INQUIRE消息来传递组件信息”的原因      CPL_DBLCLK 当用户双击控制面板中组件的图标时就会触发CPL_DBLCLK消息来相应用户的操作,一般是开启一个对话框来供用户进行调整设定,如:”Internet 选项” 就会显示一个有关IE设置的对话框,你可以在该对话框中设置IE的一些属性      CPL_STOP 这个消息主要是提供机会给你进行善后工作的,如释放与组件相关的内存.
察看评论详细内容 我要发表评论
作者笔名 简短内容 发表时间
:
键盘也能翻页,试试“← →”键

关注我们

最新资讯离线随时看 聊天吐槽赢奖品