I have made a simple Pane class so that I can encapsulate a winapi Dialog.
I call it as:
Here the code I have, but it displays no dialog.
Here is what I do in main:
Code:Pane(&hDlg, hInstance, nCmdShow); while((ret = GetMessage(&msg, 0, 0, 0)) != 0) { if(ret == -1) return -1; if(!IsDialogMessage(hDlg, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } }//while
Pane.h
Pane.cppCode:#pragma once #include "stdafx.h" #include "resource.h" #pragma comment(linker, \ "\"/manifestdependency:type='Win32' "\ "name='Microsoft.Windows.Common-Controls' "\ "version='6.0.0.0' "\ "processorArchitecture='*' "\ "publicKeyToken='6595b64144ccf1df' "\ "language='*'\"") #pragma comment(lib, "ComCtl32.lib") class Pane { public: static HWND m_hDlg; MSG msg; HINSTANCE hInstance; int nCmdShow; Pane(HWND *hDlg, HINSTANCE hINstance, int ncmdshow); ~Pane(void); static void onRestartNow(); static void onRestartLater(); static void onClose(); static BOOL CALLBACK DialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); };
Code:#include "StdAfx.h" #include "Pane.h" HWND Pane::m_hDlg = 0; Pane::Pane(HWND *hDlg, HINSTANCE hINstance, int nCmdShow) { InitCommonControls(); m_hDlg = CreateDialogParam(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), 0, DialogProc, 0); *hDlg = m_hDlg; HICON hIcon = LoadIcon(NULL, IDI_EXCLAMATION); HWND hImageCtl = GetDlgItem(*hDlg, IDC_STATIC_ICON); ::SendMessage(hImageCtl, STM_SETIMAGE, IMAGE_ICON, (LPARAM)hIcon); ShowWindow(m_hDlg, nCmdShow); } void Pane::onRestartNow() { SendMessage(m_hDlg, WM_CLOSE, 0, 0); } void Pane::onRestartLater() { SendMessage(m_hDlg, WM_CLOSE, 0, 0); } void Pane::onClose() { DestroyWindow(m_hDlg); } INT_PTR CALLBACK Pane::DialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(uMsg) /* more compact, each "case" through a single line, easier on the eyes */ { case WM_COMMAND: switch(LOWORD(wParam)) { case ID_RESTART_NOW: onRestartNow(); return TRUE; case ID_RESTART_LATER: onRestartLater(); return TRUE; } break; case WM_CLOSE: onClose(); return TRUE; case WM_DESTROY: PostQuitMessage(0); return TRUE; } return FALSE; } Pane::~Pane(void) { }




Reply With Quote