kt1117 Temat założony przez niniejszego użytkownika |
» 2011-01-01 15:11:26 Miałem takie coś. Teraz działa, dzięki za wszystko.
E:Czyli jeśli mam plik dodany do projektu to nie mogę go dołączyć za pomocą "#include"?
Mam jeszcze jedno pytanie, a mianowicie, jak wygląda procedura zdarzeniowa niemodalnego okna dialogowego?
Mam taki kod w pliku .cpp:
#include <string> #define WIN32_LEAN_AND_MEAN #include <windows.h> #include <windowsx.h>
HWND hPrzyc; HWND hwnd; MSG messages; MSG msg; WNDCLASSEX wincl; HWND hPasek; HWND dial;
LRESULT CALLBACK WindowProcedure( HWND, UINT, WPARAM, LPARAM ); BOOL CALLBACK DlgProc( HWND, UINT, WPARAM, LPARAM );
char szClassName[] = "CodeBlocksWindowsApp";
int WINAPI WinMain( HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil ) { wincl.hInstance = hThisInstance; wincl.lpszClassName = szClassName; wincl.lpfnWndProc = WindowProcedure; wincl.style = CS_DBLCLKS; wincl.cbSize = sizeof( WNDCLASSEX ); wincl.hIcon = LoadIcon( NULL, IDI_APPLICATION ); wincl.hIconSm = LoadIcon( NULL, IDI_APPLICATION ); wincl.hCursor = LoadCursor( NULL, IDC_ARROW ); wincl.lpszMenuName = NULL; wincl.cbClsExtra = 0; wincl.cbWndExtra = 0; wincl.hbrBackground =( HBRUSH ) COLOR_BACKGROUND; if( !RegisterClassEx( & wincl ) ) return 0; hwnd = CreateWindowEx( 0, szClassName, "Code::Blocks Template Windows App", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 544, 375, HWND_DESKTOP, NULL, hThisInstance, NULL ); ShowWindow( hwnd, nFunsterStil ); CreateDialog( GetModuleHandle( NULL ), MAKEINTRESOURCE( 200 ), hwnd, DlgProc ); while( GetMessage( & messages, NULL, 0, 0 ) ) { if( !IsDialogMessage( hPasek, & msg ) ) { TranslateMessage( & msg ); DispatchMessage( & msg ); } } return messages.wParam; }
LRESULT CALLBACK WindowProcedure( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam ) { switch( message ) { break; case WM_DESTROY: PostQuitMessage( 0 ); break; default: return DefWindowProc( hwnd, message, wParam, lParam ); } return 0; } BOOL CALLBACK DlgProc( HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam ) { switch( Msg ) { case WM_INITDIALOG: { } break; case WM_COMMAND: { } break; default: return FALSE; } return TRUE; }
, w .h:
#define IDD_PASEK 200
#define IDC_PRZYC1 201
#define IDC_PRZYC1 202
#define IDC_PRZYC1 203
i w .rc
#include <windows.h>
IDD_PASEK DIALOGEX 0, 0, 98, 52
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION
EXSTYLE WS_EX_TOOLWINDOW
CAPTION "Mój pasek narzêdzi"
FONT 8, "MS Sans Serif"
{
PUSHBUTTON "&Pierwszy przycisk", IDC_PRZYC1, 7, 7, 84, 14
PUSHBUTTON "&Drugi przycisk", IDC_PRZYC2, 7, 31, 84, 14
PUSHBUTTON "&Trzeci przycisk", IDC_PRZYC3, 7, 31, 84, 14
}
, i wyskakuje mi błąd:
syntax error
, a gdy usunę linijki zaczynające się od słowa PUSHBUTTON,
kod kompiluje się, lecz w wyniku dostaję okno, które nie reaguje na "bodźce zewnętrzne" i nic poza tym.
|
|
kt1117 Temat założony przez niniejszego użytkownika |
» 2011-01-02 18:09:22 Pokombinowałem trochę i stworzyłem taki kod:
#include <windows.h>
HWND hPrzyc; HWND hwnd; MSG messages; MSG Msg; WNDCLASSEX wincl; HWND hPasek; HWND dial;
LRESULT CALLBACK WindowProcedure( HWND, UINT, WPARAM, LPARAM ); BOOL CALLBACK DlgProc( HWND, UINT, WPARAM, LPARAM );
char szClassName[] = "CodeBlocksWindowsApp";
int WINAPI WinMain( HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil ) { wincl.hInstance = hThisInstance; wincl.lpszClassName = szClassName; wincl.lpfnWndProc = WindowProcedure; wincl.style = CS_DBLCLKS; wincl.cbSize = sizeof( WNDCLASSEX ); wincl.hIcon = LoadIcon( NULL, IDI_APPLICATION ); wincl.hIconSm = LoadIcon( NULL, IDI_APPLICATION ); wincl.hCursor = LoadCursor( NULL, IDC_ARROW ); wincl.lpszMenuName = NULL; wincl.cbClsExtra = 0; wincl.cbWndExtra = 0; wincl.hbrBackground =( HBRUSH ) COLOR_BACKGROUND; if( !RegisterClassEx( & wincl ) ) return 0; hwnd = CreateWindowEx( 0, szClassName, "Code::Blocks Template Windows App", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 544, 375, HWND_DESKTOP, NULL, hThisInstance, NULL ); ShowWindow( hwnd, nFunsterStil ); hPasek = CreateDialog( hThisInstance, MAKEINTRESOURCE( 200 ), hwnd, DlgProc ); while( GetMessage( & messages, NULL, 0, 0 ) ) { if( !IsDialogMessage( hPasek, & Msg ) ) { TranslateMessage( & messages ); DispatchMessage( & messages ); } } return messages.wParam; }
LRESULT CALLBACK WindowProcedure( HWND hwnd, UINT messages, WPARAM wParam, LPARAM lParam ) { switch( messages ) { break; case WM_DESTROY: PostQuitMessage( 0 ); break; default: return DefWindowProc( hwnd, messages, wParam, lParam ); } return 0; } BOOL CALLBACK DlgProc( HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam ) { switch( Msg ) { case WM_INITDIALOG: { } break; case WM_COMMAND: { } break; default: return FALSE; } return TRUE; }
, teraz gdy wcześniej wspomniane trzy linijki z PUSHBUTTON na początku są, usunięte kod kompiluje się, i powstaje okno, ale tylko jedno, główne i daje się przesuwać wyłączać itd. lecz dalej nie potrafię stworzyć tego niemodalnego. Jak to zrobić? |
|
DejaVu |
» 2011-01-02 18:45:05 Dla mnie nie ma tematu do rozmowy z prostego powodu - kod jest przekopiowany skądśtam i twierdzisz, że coś tam robisz wspaniałego z nim. To nie jest efekt Twojej pracy. Poczytaj kurs WinAPI to będziesz wiedział co jest do czego. |
|
kt1117 Temat założony przez niniejszego użytkownika |
» 2011-01-02 20:19:57 Właśnie ten kod wziąłem z kursu WinApi, naczy nie w całości, bo tam były wskazówki jak to zrobić i postępowałem zgodnie z nimi, i teraz za bardzo nie wiem co z nim zrobić, bo co chwilę wyskakują bugi, to wycinam ten kod co te bugi powoduje, ale powstają nowe i nowe. |
|
DejaVu |
» 2011-01-02 20:48:05 Kursy zazwyczaj się czyta od początku do końca, a nie od miejsca, które nas interesuje - nie wiesz co jak działa - cofnij się do poprzedniego rozdziału - i cofaj się aż do odnalezienia miejsca, którego nie rozumiesz albo zacznij czytać go od początku. Lepszej pomocy niż kurs nie dostaniesz chyba, że oczekujesz gotowca, których tutaj ja osobiście nie toleruję - przynajmniej nie na poziomie podstawowym, który jest wytłumaczony wystarczająco dobrze w wielu źródłach do których wystarczy po prostu sięgnąć. |
|
kt1117 Temat założony przez niniejszego użytkownika |
» 2011-01-03 17:28:40 Sorry, że zawracałem wam głowę, nie wiedziałem co daje przebudowanie i nie korzystałem z niego, teraz przypadkowo nacisnąłem ten przycisk, i wszystko działa. E: Tylko nie działają PUSHBUTTON'y i LTEXT'y, ale poradzę sobie bez tego. |
|
1 « 2 » |