Control Panel Applet using MFC
Posted
by Ben Burnett
on February 3rd, 2000
Environment: Wnidows NT4 SP5, Visual C++ 6 SP2
Ever wanted to make a Control Panel Applet using MFC but couldent get it to
work?
Simlpy folow these steps:
2. In the CWinApp header file define the folowing members:
////////////////////////////////////////////////////// // PanelApp.h class CPanelApp : public CWinApp { public: CPanelApp(); // Static data static CPanelApp* m_pThis; // Static member functions (callbacks) static LONG APIENTRY CPlApplet(HWND hWnd, UINT uMsg, LONG lParam1, LONG lParam2); LONG OnDblclk(HWND hWnd, UINT uAppNum, LONG lData); LONG OnExit(); LONG OnGetCount(); LONG OnInit(); LONG OnInquire(UINT uAppNum, CPLINFO* pInfo); LONG OnNewInquire(UINT uAppNum, NEWCPLINFO* pInfo); LONG OnStop(UINT uAppNum, LONG lData); };
2. In the CWinApp source file add the folowing code:
////////////////////////////////////////////////////// // PanelApp.cpp // Static data initialization CPanelApp* CPanelApp::m_pThis = NULL; // CPanelApp construction CPanelApp::CPanelApp() { m_pThis = this; } // Callback members LONG APIENTRY CPanelApp::CPlApplet(HWND hWnd, UINT uMsg, LONG lParam1, LONG lParam2) { // Avoids state problems in MFC extensions using // shared MFC libs. AFX_MANAGE_STATE(AfxGetStaticModuleState()); CPanelApp* pApplet = m_pThis; ASSERT(pApplet); switch (uMsg) { case CPL_DBLCLK: return pApplet->OnDblclk(hWnd, lParam1, lParam2); case CPL_EXIT: return pApplet->OnExit(); case CPL_GETCOUNT: return pApplet->OnGetCount(); case CPL_INIT: return pApplet->OnInit(); case CPL_INQUIRE: return pApplet->OnInquire(lParam1, (CPLINFO*)lParam2); case CPL_NEWINQUIRE: return pApplet->OnNewInquire(lParam1, (NEWCPLINFO*)lParam2); case CPL_STOP: return pApplet->OnStop(lParam1, lParam2); case CPL_STARTWPARMS: return pApplet->OnDblclk(hWnd, lParam1, lParam2); default: break; } return 1; } // Default command handlers LONG CPanelApp::OnNewInquire(UINT uAppNum, NEWCPLINFO* pInfo) { // Fill in the data pInfo->dwSize = sizeof(NEWCPLINFO); pInfo->dwFlags = 0; pInfo->dwHelpContext = 0; pInfo->lData = 0; pInfo->hIcon = LoadIcon(IDI_MAINFRM); CString sCplName, sCplInfo; sCplName.LoadString(IDS_CPL_NAME); sCplInfo.LoadString(IDS_CPL_INFOSTRING); _tcscpy(pInfo->szName, sCplName); _tcscpy(pInfo->szInfo, sCplInfo); _tcscpy(pInfo->szHelpFile, _T("")); return 0; } LONG CPanelApp::OnInquire(UINT uAppNum, CPLINFO* pInfo) { pInfo->idIcon = IDI_MAINFRM; pInfo->idName = IDS_CPL_NAME; pInfo->idInfo = IDS_CPL_INFOSTRING; pInfo->lData = 0; return 0; } LONG CPanelApp::OnDblclk(HWND hWnd, UINT uAppNum, LONG lData) { // Insert your Control Panel Applet dialog (property // sheet) code here return 0; } LONG CPanelApp::OnExit() { return 0; // OK } LONG CPanelApp::OnGetCount() { return 1; // only one applet } LONG CPanelApp::OnInit() { return 1; // OK } LONG CPanelApp::OnStop(UINT uAppNum, LONG lData) { return 1; // not handled }
3. Finaly add the folowing to the projects *.def file
; Panel.def : Declares the module parameters for the DLL. LIBRARY "Panel" DESCRIPTION 'Panel Windows Dynamic Link Library' EXPORTS ; Explicit exports can go here CPlApplet
Thats all there is too it!
Comments
Question: How to interface CPIApplet in VB
Posted by Legacy on 02/11/2002 12:00amOriginally posted by: EduardoS
Hello People ...
I wanna know how to interfaces this code with VB ... I need create an Control Panel Applet in VB but I dont know C ...
Thanks!
ReplyUse RUNDLL32 to Debug Control Panel Applets
Posted by Legacy on 01/10/2001 12:00amOriginally posted by: Ernest L.
You may want to debug a control panel application
using this tip:
Executable for debug session:
C:\winnt\system32\rundll32.exe (or put your own path)
Program arguments:
shell32.dll,Control_RunDLL <cpl application path>
or bookmark this faqs:
Replyhttp://support.microsoft.com/support/kb/articles/Q166/1/68.ASP
See a book "Professioal NT Services' by Kevin Miller
Posted by Legacy on 03/25/2000 12:00amOriginally posted by: Andrei Romanov
Exactly the same code was published in chapter 11 of "Professioal NT Services' by Kevin Miller, WROX, ISBN 1-861001-30-4.
ReplyNot bad
Posted by Legacy on 03/01/2000 12:00amOriginally posted by: Paul Wardle
Thanks for the code. Works well.
ReplyPlease post an example source code project
Posted by Legacy on 02/04/2000 12:00amOriginally posted by: Ed E. Sutton
A nice article.
Please post an example project. Examples always get me started much faster.
-Ed
Reply