chunky Napisano Październik 28, 2015 Zgłoś Udostępnij Napisano Październik 28, 2015 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 Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Bartosz Wójcik Napisano Październik 28, 2015 Zgłoś Udostępnij Napisano Październik 28, 2015 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. Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.