Skocz do zawartości

DialogBoxParam


chunky

Recommended Posts

Hej Wszystkim ;)

Mam dialoga w nim dwa pola IDC_EDIT1 i IDC_EDIT2,
wszystko mam opakowane w klasę

DialogWnd.h http://pastebin.com/GyJPBqJu

#pragma once

#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")

#include <windows.h>
#include <tchar.h>
#include <CommCtrl.h>

#include "resource.h"

class DialogWnd
{
private:
	HWND hDialog;
	BOOL ret;
	MSG msg;

public:
	DialogWnd();
	DialogWnd(HINSTANCE hInstance, HINSTANCE h0, LPTSTR lpCmdLine, int nCmdShow);
	~DialogWnd();

	int WINAPI InitWindow(HINSTANCE hInstance, HINSTANCE h0, LPTSTR lpCommandLine, int nCmdShow);
	static INT_PTR CALLBACK DialogProc(HWND hDialog, UINT uMsg, WPARAM wParam, LPARAM lParam);
};

DialogWnd.cpp http://pastebin.com/6Eg12t0f

#include "DialogWnd.h"

DialogWnd::DialogWnd()
{
	InitCommonControls();
	InitWindow(0, 0, 0, 0);
}

DialogWnd::DialogWnd(HINSTANCE hInstance, HINSTANCE h0, LPTSTR lpCmdLine, int nCmdShow)
{
	InitCommonControls();
	InitWindow(hInstance, h0, lpCmdLine, nCmdShow);
}

DialogWnd::~DialogWnd() {}

int DialogWnd::InitWindow(HINSTANCE hInstance, HINSTANCE h0, LPTSTR lpCommandLine, int nCmdShow)
{
	hDialog = reinterpret_cast<HWND>(DialogBoxParam(hInstance, MAKEINTRESOURCE(IDD_DIALOG), 0, DialogProc, 0));
	ShowWindow(hDialog, nCmdShow);

	while ((ret = GetMessage(&msg, 0, 0, 0)) != 0)
	{
		if (ret == -1) return -1;
		if (!IsDialogMessage(hDialog, &msg))
		{
			TranslateMessage(&msg);
			DispatchMessage(&msg);
		}
	}

	return 0;
}

INT_PTR DialogWnd::DialogProc(HWND hDialog, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	switch(uMsg)
	{
	case WM_INITDIALOG:
		SetDlgItemText(hDialog, IDC_EDIT1, _T("off"));
		return TRUE;

	case WM_CLOSE:
		return TRUE;

	case WM_DESTROY:
		PostQuitMessage(0);
		return TRUE;
	}
	return FALSE;
}

i teraz chciałbym mieć metodę, która

a) odpowiednio zmieni mi IDC_EDIT1 / IDC_EDIT2 na "coś" ( SetDlgItemText? ),
b) będzie wywoływana z innej klasy

wydaje mi się, że problem stanowi msgloop, nie wiem jak to ugryźć, wskazówki mile widziane

Link do komentarza
Udostępnij na innych stronach

Musisz dodać obsługę komend WM_COMMAND, czyli np. ktoś klika na button WM_COMMAND to przechwytuje, sprawdzasz ID kontrolki, z której wyszedł klik i wtedy odpowiednio reagujesz np. SetDlgItemText(hDialog, IDC_KONTROLKA, text);

Do komunikowania się z kontrolkami okna wystarczy Ci aktywny uchwyt okna czyli w tym wypadku hDialog.

Link do komentarza
Udostępnij na innych stronach

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gość
Odpowiedz...

×   Wkleiłeś zawartość bez formatowania.   Usuń formatowanie

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Utwórz nowe...