编写控制面板程序的一个例子
2009-10-24 20:31:26 来源:WEB开发网本文配套源码
最近在编写一个Windows 98 和 Windows 2000 系统中使的MPEG播放器,我想创建一个控制面板程序,用户可以通过这个程序改变播放器的 基本配置。大家知道,控制面板程序一般都是个DLL动态库,然后将名字改为*.cpl。查找了许多资料后,发现所看到的一些例子都是用C写的。能不能在MFC中用C++来编写一个呢?答案是肯定的。本文将通过一个实际的VC++例子来示范如何编写MFC控制面板程序。
首先要清楚虽然控制面板程序是一个DLL,但它和一般DLL还是有所差别的,因为它带有一个特殊的输出接口,这个接口就是CPlApplet函数,下面是它的原型:
LRESULT CPlApplet(HWND hwnd,
UINT msg,
LPARAM lp1,
LPARAM lp2);
为了使本文的例子代码尽可能的具有可重用性,我用C++对控制面板的接口函数进行了封装。 做了一个迷你型的控制面板应用程序开发框架,利用它开发控制面板扩展程序易如反掌。 控制面板程序除了是个特别的DLL外,还有一个特点是其扩展名必须为 *.cpl,而不是*.dll。当Windows的控制面板管理程序 (CONTROL.EXE)启动后,它会在系统目录(如:windows\system或者winnt\system32)中寻找名为XXX.cpl的文件,然后加载每一个DLL并以不同的消息 参数调用CPlApplet函数。例如,当控制面板第一次启动时,它用消息msg=CPL_INIT调用 CPlApplet函数,当用户双击控制面板中的应用程序图标时,它用消息msg=CPL_DBLCLK调用CPlApplet函数,然后控制面板应用程序显示相应的对话框,每个控制面板DLL都能支持一个以上的图标或应用。通过对消息CPL_GETCOUNT的响应,可以让控制面板知道DLL中有多少个应用,通过发送CPL_INQUIRE 或 CPL_NEWINQUIRE消息,控制面板可以请求 与每一个应用有关的信息。 图一是用一个跟踪程序(TraceWin)显示的TRACE Dump,从中可以看出控制面板对消息的处理情况。
图一 使用TraceWin 显示的 TRACE Dump
由于大多数控制面板和DLL之间的交互都有固定的套路,所以可以被封装在一个框架里。本文提供了两个类,CControlPanelApp 和 CCPApplet,实现了上述的封装。为了说明这两个类的使用方法, 本文还编写了示范的控制面板程序应用DLL:MyCtrlPanel.dll,它实现了两个控制面板应用,图二是本文例子程序运行后在控制面板里创建的两个图标 ,这两个图标一个是对话框形式(如图三)、一个是属性页 形式(如图四)。
图二 例子程序图标
图三
图四
更多精彩
赞助商链接