AssSoft Temat założony przez niniejszego użytkownika |
[C++][WinApi] Otwarcie głównego okna programu » 2013-12-29 23:20:31 Witam, od niedawna uczę się WinApi, postanowiłem zrobić coś praktycznego. Konkretniej jest to notatnik. W pewnym momencie natrafiłem na dość dziwny problem, otóż mimo iż program poprawnie się kompilował uruchamiał się "ucięty". Dodałem odpowiednią instrukcję, aby uruchamiał się zmaksymalizowany, dopiero wtedy zrozumiałem na czym polegał problem. Wszystkie kontrolki były na miejscu, jednak nie było głównego okna programu. Program odpalał się bez nazwy, wyłączać trzeba go za pomocą menadżera zadań. W skrócie wygląda to tak jakby okno programu po prostu się nie pojawiało. Aby lepiej zobrazować problem zrobiłem Zrzut ekranu za pomocą darmowego programu do tego przeznaczonego. Można go zobaczyć [tu href="http://s29.postimg.org/40b586skn/2013_12_29_22h42_23.png"] Do tego dołączam oczywiście kod programu: #include <windows.h> #include <fstream> #include <HEADSSsnote.hpp> #define ID_p1 1 #define ID_p2 2 #define ID_p3 3 #define ID_p4 4 #define ID_p5 5 #define ID_p6 6 #define ID_p7 7 #define ID_p8 8 using namespace std; BITMAP bmInfo; WIN32_FIND_DATA File_Data; HWND hText; MSG Komunikat; DWORD dlugosc; LPSTR Bufor; LPSTR Bufor2; LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ); HWND hp1; HWND hp2; HWND hp3; HWND hp4; HWND hp5; HWND hp6; HWND hp7; HWND hp8; HBITMAP hmbObraz; HDC hdcNowy; HDC hdc; int odp; string zaw; bool f1 = 0; fstream zap; void start() { if( FindFirstFile( TEXT( "C:/programs" ), & File_Data ) == INVALID_HANDLE_VALUE ) { CreateDirectoryA( "C:/programs", NULL ); } if( FindFirstFile( TEXT( "C:/programs/SimpleNote" ), & File_Data ) == INVALID_HANDLE_VALUE ) { CreateDirectoryA( "C:/programs/SimpleNote", NULL ); } if( FindFirstFile( TEXT( "C:/programs/SimpleNote/save1.txt" ), & File_Data ) == INVALID_HANDLE_VALUE ) { zap.open( "C:/programs/SimpleNote/save1.txt", ios::out ); zap << ""; zap.close(); } if( FindFirstFile( TEXT( "C:/programs/SimpleNote/save2.txt" ), & File_Data ) == INVALID_HANDLE_VALUE ) { zap.open( "C:/programs/SimpleNote/save2.txt", ios::out ); zap << ""; zap.close(); } if( FindFirstFile( TEXT( "C:/programs/SimpleNote/save3.txt" ), & File_Data ) == INVALID_HANDLE_VALUE ) { zap.open( "C:/programs/SimpleNote/save3.txt", ios::out ); zap << ""; zap.close(); } if( FindFirstFile( TEXT( "C:/programs/SimpleNote/save4.txt" ), & File_Data ) == INVALID_HANDLE_VALUE ) { zap.open( "C:/programs/SimpleNote/save4.txt", ios::out ); zap << ""; zap.close(); } }
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { WNDCLASSEX wc; wc.cbSize = sizeof( WNDCLASSEX ); wc.style = 0; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon( NULL, IDI_APPLICATION ); wc.hCursor = LoadCursor( NULL, IDC_ARROW ); wc.hbrBackground =( HBRUSH )( COLOR_WINDOW + 1 ); wc.lpszMenuName = NULL; wc.lpszClassName = TEXT( "Klasa Okienka" ); wc.hIconSm = LoadIcon( NULL, IDI_APPLICATION ); if( !RegisterClassEx( & wc ) ) { MessageBox( NULL, "Wysoka Komisja odmawia rejestracji tego okna!", "Niestety...", MB_ICONEXCLAMATION | MB_OK ); return 1; } HWND hwnd; hwnd = CreateWindowEx( WS_EX_CLIENTEDGE, TEXT( "Klasa Okienka" ), "SimpleNote", WS_OVERLAPPEDWINDOW | WS_MAXIMIZE, CW_USEDEFAULT, CW_USEDEFAULT, 240, 120, NULL, NULL, hInstance, NULL ); if( hwnd == NULL ) { MessageBox( NULL, "Okno odmówiło przyjścia na świat!", "Ale kicha...", MB_ICONEXCLAMATION ); return 1; } ShowWindow( hwnd, nCmdShow ); UpdateWindow( hwnd ); hText = CreateWindowEx( WS_EX_CLIENTEDGE, "EDIT", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | ES_MULTILINE | ES_AUTOVSCROLL, 1, 70, 1050, 800, hwnd, NULL, hInstance, NULL ); hp1 = CreateWindowEx( 0, "BUTTON", "Zapisz w slot1", WS_CHILD | WS_VISIBLE, 5, 5, 150, 30, hwnd,( HMENU ) ID_p1, hInstance, NULL ); hp2 = CreateWindowEx( 0, "BUTTON", "Zapisz w slot2", WS_CHILD | WS_VISIBLE, 156, 5, 150, 30, hwnd,( HMENU ) ID_p2, hInstance, NULL ); hp3 = CreateWindowEx( 0, "BUTTON", "Zapisz w slot3", WS_CHILD | WS_VISIBLE, 307, 5, 150, 30, hwnd,( HMENU ) ID_p3, hInstance, NULL ); hp4 = CreateWindowEx( 0, "BUTTON", "Zapisz w slot4", WS_CHILD | WS_VISIBLE, 458, 5, 150, 30, hwnd,( HMENU ) ID_p4, hInstance, NULL ); hp5 = CreateWindowEx( 0, "BUTTON", "Wczytaj slot1", WS_CHILD | WS_VISIBLE, 5, 36, 150, 30, hwnd,( HMENU ) ID_p5, hInstance, NULL ); hp6 = CreateWindowEx( 0, "BUTTON", "Wczytaj slot2", WS_CHILD | WS_VISIBLE, 156, 36, 150, 30, hwnd,( HMENU ) ID_p6, hInstance, NULL ); hp7 = CreateWindowEx( 0, "BUTTON", "Wczytaj slot3", WS_CHILD | WS_VISIBLE, 307, 36, 150, 30, hwnd,( HMENU ) ID_p7, hInstance, NULL ); hp8 = CreateWindowEx( 0, "BUTTON", "Wczytaj slot4", WS_CHILD | WS_VISIBLE, 458, 36, 150, 30, hwnd,( HMENU ) ID_p8, hInstance, NULL ); hdc = GetDC( hwnd ); hmbObraz =( HBITMAP ) LoadImage( NULL, "C:/programs/SimpleNote/DATA/Snote_mainimage.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE ); hdcNowy = CreateCompatibleDC( hdc ); SelectObject( hdcNowy, hmbObraz ); GetObject( hmbObraz, sizeof( bmInfo ), & bmInfo ); hdc = GetDC( hwnd ); BitBlt( hdc, 1, 836, bmInfo.bmWidth, bmInfo.bmHeight, hdcNowy, 0, 0, SRCCOPY ); ReleaseDC( hwnd, hdc ); while( GetMessage( & Komunikat, NULL, 0, 0 ) ) { TranslateMessage( & Komunikat ); DispatchMessage( & Komunikat ); } return Komunikat.wParam; }
LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ) { switch( msg ) { case WM_CLOSE: DestroyWindow( hwnd ); break; case WM_DESTROY: PostQuitMessage( 0 ); break; case WM_PAINT: PAINTSTRUCT ps; hdc = BeginPaint( hwnd, & ps ); hmbObraz =( HBITMAP ) LoadImage( NULL, "C:/programs/SimpleNote/DATA/Snote_mainimage.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE ); hdcNowy = CreateCompatibleDC( hdc ); SelectObject( hdcNowy, hmbObraz ); GetObject( hmbObraz, sizeof( bmInfo ), & bmInfo ); BitBlt( hdc, 1, 871, bmInfo.bmWidth, bmInfo.bmHeight, hdcNowy, 0, 0, SRCCOPY ); ReleaseDC( hwnd, hdc ); EndPaint( hwnd, & ps ); break; case WM_COMMAND: dlugosc = GetWindowTextLength( hText ); Bufor =( LPSTR ) GlobalAlloc( GPTR, dlugosc + 1 ); GetWindowText( hText, Bufor, dlugosc + 1 ); switch( wParam ) { case ID_p1: start(); zap.open( "C:/programs/SimpleNote/save1.txt", ios::in ); zap >> zaw; if( zaw.length() > 1 ) { odp = MessageBox( NULL, TEXT( "W slocie 1 znajduje się już tekst. Czy chcesz nadpisać?" ), TEXT( "Nadpisywanie" ), MB_YESNO | MB_ICONQUESTION ); if( odp == IDNO ) { break; } } zap.close(); zap.open( "C:/programs/SimpleNote/save1.txt", ios::out ); zap << Bufor; zap.close(); MessageBox( NULL, TEXT( "Zakończono zapisywanie" ), TEXT( "Informacja" ), MB_OK | MB_ICONINFORMATION ); break; case ID_p2: start(); zap.open( "C:/programs/SimpleNote/save2.txt", ios::in ); zap >> zaw; if( zaw.length() > 1 ) { odp = MessageBox( NULL, TEXT( "W slocie 2 znajduje się już tekst. Czy chcesz nadpisać?" ), TEXT( "Nadpisywanie" ), MB_YESNO | MB_ICONQUESTION ); if( odp == IDNO ) { break; } } zap.close(); zap.open( "C:/programs/SimpleNote/save2.txt", ios::out ); zap << Bufor; zap.close(); MessageBox( NULL, TEXT( "Zakończono zapisywanie" ), TEXT( "Informacja" ), MB_OK | MB_ICONINFORMATION ); break; case ID_p3: start(); zap.open( "C:/programs/SimpleNote/save3.txt", ios::in ); zap >> zaw; if( zaw.length() > 1 ) { odp = MessageBox( NULL, TEXT( "W slocie 3 znajduje się już tekst. Czy chcesz nadpisać?" ), TEXT( "Nadpisywanie" ), MB_YESNO | MB_ICONQUESTION ); if( odp == IDNO ) { break; } } zap.close(); zap.open( "C:/programs/SimpleNote/save3.txt", ios::out ); zap << Bufor; zap.close(); MessageBox( NULL, TEXT( "Zakończono zapisywanie" ), TEXT( "Informacja" ), MB_OK | MB_ICONINFORMATION ); break; case ID_p4: start(); zap.open( "C:/programs/SimpleNote/save4.txt", ios::in ); zap >> zaw; if( zaw.length() > 1 ) { odp = MessageBox( NULL, TEXT( "W slocie 4 znajduje się już tekst. Czy chcesz nadpisać?" ), TEXT( "Nadpisywanie" ), MB_YESNO | MB_ICONQUESTION ); if( odp == IDNO ) { break; } } zap.close(); zap.open( "C:/programs/SimpleNote/save4.txt", ios::out ); zap << Bufor; zap.close(); MessageBox( NULL, TEXT( "Zakończono zapisywanie" ), TEXT( "Informacja" ), MB_OK | MB_ICONINFORMATION ); break; case ID_p5: zap.open( "C:/programs/SimpleNote/save1.txt", ios::in ); zap >> Bufor; zap.close(); SetWindowText( hText, Bufor ); break; case ID_p6: zap.open( "C:/programs/SimpleNote/save2.txt", ios::in ); zap >> Bufor; zap.close(); SetWindowText( hText, Bufor ); break; case ID_p7: zap.open( "C:/programs/SimpleNote/save3.txt", ios::in ); zap >> Bufor; zap.close(); SetWindowText( hText, Bufor ); break; case ID_p8: zap.open( "C:/programs/SimpleNote/save4.txt", ios::in ); zap >> Bufor; zap.close(); SetWindowText( hText, Bufor ); break; default: return DefWindowProc( hwnd, msg, wParam, lParam ); } return 0; } }
w "HEADSSsnote.hpp" Znają się definicje 3 nieistotnych dla aplikacji funkcji, które dołączam do większości moich programów ( Są to funkcje zastępujące "Sleep()" i "sleep()" Jeśli ktoś chce wypróbować samemu tą aplikacje to obrazek ( na razie tylko tymczasowy ) można znaleźć [tu href="http://s22.postimg.org/49s2jnn4x/Snote_mainimage.png"]. Dodatkowo dołączam log kompilacji. Kompilator: TDM-GCC 4.7.1 64-bit Release Building Makefile "C:\projekty\SimpleNote\Makefile.win" Wykonywanie make... mingw32-make.exe -f "C:\projekty\SimpleNote\Makefile.win" all g++.exe -c main.cpp -o main.o -I"C:/Program Files (x86)/Dev-Cpp/MinGW64/x86_64-w64-mingw32/include" -I"C:/projekty/SimpleNote" -g3
g++.exe -c "../../folder c++/Headers_file/WAITTIME.cpp" -o "../../folder c++/Headers_file/WAITTIME.o" -I"C:/Program Files (x86)/Dev-Cpp/MinGW64/x86_64-w64-mingw32/include" -I"C:/projekty/SimpleNote" -g3
g++.exe main.o "../../folder c++/Headers_file/WAITTIME.o" -o SimpleNote.exe -L"C:/Program Files (x86)/Dev-Cpp/MinGW64/x86_64-w64-mingw32/lib" -static-libgcc -mwindows -g3
Wykonanie zakończone Kompilacja zakończona sukcesem Z góry dziękuję za pomoc! P.S - To mój pierwszy post więc nie wiem czy w pełni poprawnie go wykonałem. |