Ĺadny brzuch
Witam
Mam problem z kontrolką RichEdit. Ładuję bibliotekę, tworze kontrolkę, ale podczas zamykania programu, gdy chcę zwolnić bibliotekę wywala mi błąd "Wystąpił problem z aplikacją ircconsole.exe i zostanie ona zamknięta. Przepraszamy za kłopoty." Zamieszczam kod całego programu i makefile może ktoś coś poradzi.
main.c
#include <windows.h> HINSTANCE RichEditInstance; HWND RichEditHandle, EditHandle; BOOL CALLBACK DialogProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_CLOSE: FreeLibrary(RichEditInstance); EndDialog(hwnd, 0); return TRUE; case WM_INITDIALOG: RichEditHandle = GetDlgItem(hwnd, 101); EditHandle = GetDlgItem(hwnd, 102); return TRUE; case WM_SIZE: if (wParam != SIZE_MINIMIZED) { MoveWindow(RichEditHandle, 0, 0, LOWORD(lParam), HIWORD(lParam) - 25, TRUE); MoveWindow(EditHandle, 0, HIWORD(lParam) - 25, LOWORD(lParam), HIWORD(lParam) - (HIWORD(lParam) - 25), TRUE); } return TRUE; case WM_COMMAND: switch (LOWORD(wParam)) { case 1010: //kod return TRUE; case 1020: SendMessage(hwnd, WM_CLOSE, 0, 0); return TRUE; case 1030: //kod return TRUE; case 1040: //kod return TRUE; case 1050: //kod return TRUE; case 1060: //kod return TRUE; } break; } return FALSE; } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmd, int nShow) { RichEditInstance = LoadLibrary("riched32.dll"); return DialogBox(hInstance, MAKEINTRESOURCE(100), NULL, DialogProcedure); }
resources.rc
#include <windows.h> 100 DIALOG 0, 0, 300, 200 STYLE DS_CENTER | DS_MODALFRAME | WS_OVERLAPPEDWINDOW CAPTION "IRC Console" FONT 8, "Helv" MENU 1000 BEGIN CONTROL "", 101, "RichEdit", ES_READONLY | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_MULTILINE | WS_BORDER | WS_CHILD | WS_VISIBLE, 0, 0, 0, 0 CONTROL "", 102, "Edit", ES_AUTOHSCROLL | WS_BORDER | WS_CHILD | WS_VISIBLE, 0, 0, 0, 0 END 1000 MENU BEGIN POPUP "File" BEGIN MENUITEM "Save log", 1010 MENUITEM "Exit", 1020 END POPUP "Server" BEGIN MENUITEM "Connect", 1030 MENUITEM "Disconnect", 1040 END POPUP "Configure" BEGIN MENUITEM "User", 1050 MENUITEM "Console", 1060 END END
makefile
filename = ircconsole sourcename = main resourcename = resources .silent: all: $(sourcename).c $(resourcename).rc gcc -c $(sourcename).c -o $(sourcename).o windres -i $(resourcename).rc --input-format=rc -o $(resourcename).res -O coff gcc $(sourcename).o $(resourcename).res -o $(filename).exe -mwindows strip --strip-all $(filename).exe clean: del $(sourcename).o del $(resourcename).res del $(filename).exe
Dodałem jeszcze taki kod w main.c:
case WM_KEYDOWN: if (wParam == VK_RETURN) { //kod } return TRUE;
Klawiatura wcale nie reaguje.
case WM_CLOSE: { EndDialog(hwnd,0); DestroyWindow(RichEditHandle); FreeLibrary(RichEditInstance); } return TRUE;
Użytkownik Cyrkiel edytował ten post 23 czerwiec 2006, 18:45
Dzięki pomogło, a co z klawiaturą?
Już wiem! Chodzi o subclassing.
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Mam problem z kontrolką RichEdit. Ładuję bibliotekę, tworze kontrolkę, ale podczas zamykania programu, gdy chcę zwolnić bibliotekę wywala mi błąd "Wystąpił problem z aplikacją ircconsole.exe i zostanie ona zamknięta. Przepraszamy za kłopoty." Zamieszczam kod całego programu i makefile może ktoś coś poradzi.
main.c
#include <windows.h> HINSTANCE RichEditInstance; HWND RichEditHandle, EditHandle; BOOL CALLBACK DialogProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_CLOSE: FreeLibrary(RichEditInstance); EndDialog(hwnd, 0); return TRUE; case WM_INITDIALOG: RichEditHandle = GetDlgItem(hwnd, 101); EditHandle = GetDlgItem(hwnd, 102); return TRUE; case WM_SIZE: if (wParam != SIZE_MINIMIZED) { MoveWindow(RichEditHandle, 0, 0, LOWORD(lParam), HIWORD(lParam) - 25, TRUE); MoveWindow(EditHandle, 0, HIWORD(lParam) - 25, LOWORD(lParam), HIWORD(lParam) - (HIWORD(lParam) - 25), TRUE); } return TRUE; case WM_COMMAND: switch (LOWORD(wParam)) { case 1010: //kod return TRUE; case 1020: SendMessage(hwnd, WM_CLOSE, 0, 0); return TRUE; case 1030: //kod return TRUE; case 1040: //kod return TRUE; case 1050: //kod return TRUE; case 1060: //kod return TRUE; } break; } return FALSE; } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmd, int nShow) { RichEditInstance = LoadLibrary("riched32.dll"); return DialogBox(hInstance, MAKEINTRESOURCE(100), NULL, DialogProcedure); }
resources.rc
#include <windows.h> 100 DIALOG 0, 0, 300, 200 STYLE DS_CENTER | DS_MODALFRAME | WS_OVERLAPPEDWINDOW CAPTION "IRC Console" FONT 8, "Helv" MENU 1000 BEGIN CONTROL "", 101, "RichEdit", ES_READONLY | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_MULTILINE | WS_BORDER | WS_CHILD | WS_VISIBLE, 0, 0, 0, 0 CONTROL "", 102, "Edit", ES_AUTOHSCROLL | WS_BORDER | WS_CHILD | WS_VISIBLE, 0, 0, 0, 0 END 1000 MENU BEGIN POPUP "File" BEGIN MENUITEM "Save log", 1010 MENUITEM "Exit", 1020 END POPUP "Server" BEGIN MENUITEM "Connect", 1030 MENUITEM "Disconnect", 1040 END POPUP "Configure" BEGIN MENUITEM "User", 1050 MENUITEM "Console", 1060 END END
makefile
filename = ircconsole sourcename = main resourcename = resources .silent: all: $(sourcename).c $(resourcename).rc gcc -c $(sourcename).c -o $(sourcename).o windres -i $(resourcename).rc --input-format=rc -o $(resourcename).res -O coff gcc $(sourcename).o $(resourcename).res -o $(filename).exe -mwindows strip --strip-all $(filename).exe clean: del $(sourcename).o del $(resourcename).res del $(filename).exe
Dodałem jeszcze taki kod w main.c:
case WM_KEYDOWN: if (wParam == VK_RETURN) { //kod } return TRUE;
Klawiatura wcale nie reaguje.
case WM_CLOSE: { EndDialog(hwnd,0); DestroyWindow(RichEditHandle); FreeLibrary(RichEditInstance); } return TRUE;
Użytkownik Cyrkiel edytował ten post 23 czerwiec 2006, 18:45
Dzięki pomogło, a co z klawiaturą?
Już wiem! Chodzi o subclassing.