Skocz do zawartości

Recommended Posts

Napisano

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

Napisano

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.

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...