Quantcast
Channel: CodeGuru Forums - Visual C++ Programming
Viewing all articles
Browse latest Browse all 3042

How to encapsulate a winapi Dialog in a class?

$
0
0
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
Code:

#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);
};

Pane.cpp
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)
{
}


Viewing all articles
Browse latest Browse all 3042

Trending Articles