WEB开发网
开发学院软件开发VC 利用VC++编写Windows95的CPL组件 阅读

利用VC++编写Windows95的CPL组件

 2010-05-27 20:37:41 来源:WEB开发网   
核心提示: 如果要在一个CPL 库中支持多个组件,那么至少还要重载OnGetCount() 函数,利用VC++编写Windows95的CPL组件(2),编写消息处理代码,OnInquire() 函数负责返回组件的各种信息,调试正确后,重新建立CPL 库的Release 版,可参考基类中该函数的实现代码,OnDblClk() 函数

---- 如果要在一个CPL 库中支持多个组件,那么至少还要重载OnGetCount() 函数。

编写消息处理代码,OnInquire() 函数负责返回组件的各种信息,可参考基类中该函数的实现代码,OnDblClk() 函数负责读取和保存各个参数,并调用对话框让用户选择。

设计对话框,用ClassWizard 生成对话框的处理代码,并修改这些代码使之符合要求。

源代码编写完毕后,编译连接,把生成的CPL 文件拷则到SYSTEM 目录下,运行控制面板进行调试。

调试正确后,重新建立CPL 库的Release 版。

// CtrlPan.h:类CControlPanel 的声明

#ifndef _CTRLPAN_H_
#define _CTRLPAN_H_
#include   //VC 提供的头文件
class CControlPanel
{
public:
  CControlPanel();
  virtual ~CControlPanel();
  // 可重载的消息处理函数
  virtual LONG OnDblClk(HWND hwndCPl, UINT uAppNum, LONG lData);
  virtual LONG OnExit();
  virtual LONG OnGetCount();
  virtual LONG OnInit();
  virtual LONG OnInquire(UINT uAppNum, NEWCPLINFO* pInfo);
  virtual LONG OnSelect(UINT uAppNum, LONG lData);
  virtual LONG OnStop(UINT uAppNum, LONG lData);
          virtual LONG OnExit();
  // CPL 库的输出函数
  static LONG APIENTRY CPlApplet(HWND hwndCPl, UINT uMsg,LONG lParam1, LONG lParam2);
   static CControlPanel* m_pThis;
};
#endif // _CTRLPAN_H_
// CtrlPan.cpp, 定义了类CControlPanel 的缺省处理函数
#include "stdafx.h"
#include "ctrlpan.h"
CControlPanel* CControlPanel::m_pThis = NULL;
CControlPanel::CControlPanel()
{          m_pThis = this; }
CControlPanel::~CControlPanel()
{ }
// CPL 库的输出函数
LONG APIENTRY CControlPanel::CPlApplet(HWND hwndCPl, UINT uMsg,LONG lParam1, LONG lParam2)
{
  CControlPanel* pCtrl = m_pThis;
  ASSERT(pCtrl); // 检查pCtrl 的有效性
  switch (uMsg) {
  case CPL_DBLCLK:
          return pCtrl->OnDblClk(hwndCPl, lParam1, lParam2);
          case CPL_EXIT:
    return pCtrl->OnExit();
          case CPL_GETCOUNT:
    return pCtrl->OnGetCount();
  case CPL_INIT:
    return pCtrl->OnInit();
  case CPL_NEWINQUIRE:
    return pCtrl->OnInquire(lParam1, (NEWCPLINFO*)lParam2);
  case CPL_INQUIRE:
    return 0; // 基于WIN32 的CPL 库不处理这条消息
  case CPL_SELECT:
    return pCtrl->OnSelect(lParam1, lParam2);
  case CPL_STOP:
    return pCtrl->OnStop(lParam1, lParam2);
          case CPL_EXIT:
            retrun pCtrl->OnExit();
  default: break;
  }
  return 1;
}
// 缺省的消息处理函数
LONG CControlPanel::OnDblClk(HWND hwndCPl, UINT uAppNum, LONG lData)
{ return 0; }
LONG CControlPanel::OnExit()
{ return 0; }
LONG CControlPanel::OnGetCount()
{ return 1; } // 缺省为一个组件
LONG CControlPanel::OnInit()
{ return 1; }
LONG CControlPanel::OnInquire(UINT uAppNum, NEWCPLINFO* pInfo)
{
  // 填充NEWCPLINFO 结构,结构的定义请参考VC 的联机帮助
  pInfo->dwSize = sizeof(NEWCPLINFO);
  pInfo->dwFlags = 0;
  pInfo->dwHelpContext = 0;
  pInfo->lData = 0;
  pInfo->hIcon = ::LoadIcon(AfxGetResourceHandle(), MAKEINTRESOURCE(1));
  strcpy(pInfo->szName, "Applet");
  strcpy(pInfo->szInfo, "Default Control Panel Applet");
  strcpy(pInfo->szHelpFile, "");
  return 0;
}
LONG CControlPanel::OnSelect(UINT uAppNum, LONG lData)
{ return 1; }
LONG CControlPanel::OnStop(UINT uAppNum, LONG lData)
{ return 1; }
LONG CControlPanel::OnExit()
{ return 1; }

上一页  1 2 

Tags:利用 VC 编写

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接