dalton85 Δημοσ. 22 Μαΐου 2007 Δημοσ. 22 Μαΐου 2007 Το ακολουθο ειναι κωδικας απο βιβλιο που υποτιθεται δημιουργη ενα παραθυρο στα windows. Και λεω υποτιθεται γιατι ακομα δεν καταφερα να το τρεξω. Ο λογος ειναι οτι χτυπαει στο : LRESULT CALLBACK WindowFunc(HWND,UINT,WPARAM,LPARAM);int WINAPI WinMain(HINSTANCE hThisInst, HINSTANCE hPrevInst, LPSTR IpszArgs, int nWinMode) Σε αυτες τις δυο εντολες. #include<windows.h> LRESULT CALLBACK WindowFunc(HWND,UINT,WPARAM,LPARAM); char szWinName[]="MyWin"; int WINAPI WinMain(HINSTANCE hThisInst, HINSTANCE hPrevInst, LPSTR IpszArgs, int nWinMode) { HWND hwnd; MSG msg; WNDCLASSEX wcl; wcl.cbSize=sizeof(WNDCLASSEX); wcl.hInstance=hThisInst; wcl.lpszClassName=szWinName; wcl.lpfnWndProc=WindowFunc; wcl.style=0; 20wcl.hIcon=LoadIcon(NULL,IDI_APPLICATION); 20wcl.hIconSm=LoadIcon(NULL,IDI_WINLOGO); wcl.hCursor=LoadCursor(NULL, IDC_ARROW); wcl.lpszMenuName=NULL; wcl.cbClsExtra=0; wcl.cbWndExtra=0; wcl.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); if(!RegisterClassEx(&wcl))return 0; hwnd=CreateWindow( szWinName, "Diablo Clock Ticker", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, HWND_DESKTOP, NULL, hThisInst, NULL ); ShowWindow(hwnd,nWinMode); UpdateWindow(hwnd); while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } LRESULT CALLBACK WindowFunc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { case WM_DESTROY: PortQuitMessage(0); break; default: return DefWindowProc(hwnd, message,wParam, lParam); } return 0; }
georgemarios Δημοσ. 23 Μαΐου 2007 Δημοσ. 23 Μαΐου 2007 η συνταξη σου ειναι σωστη (αν εξαιρεσω το PortQuitMessage που ειναι PoStQuitMessage) που σου σκαει? με ποιο compiler παιζεις? Αν εισαι με Visual Studio, σιγουρεψου οτι χρησιμοποιεις multi-byte character set και οχι unicode
dalton85 Δημοσ. 23 Μαΐου 2007 Μέλος Δημοσ. 23 Μαΐου 2007 Χρησιμοποιο τo Turbo C 2.01. Μου λεει : Declaration syntax error στης γραμμες: LRESULT CALLBACK WindowFunc(HWND,UINT,WPARAM,LPARAM); και: int WINAPI WinMain(HINSTANCE hThisInst, HINSTANCE hPrevInst, LPSTR IpszArgs, int nWinMode) το windows.h το βρηκα απο εναν αλλον compiler στο internet ιδιον. Σε αλλον compiler που εχω τον Dev C++V.4.9.9.2 της Bloodshed μου βγαζει invalid suffix "wcl.hIcon" on integer constant invalid suffix "wcl.hIconSm" on integer constant για τις γραμμες: 20wcl.hIcon=LoadIcon(NULL,IDI_APPLICATION); 20wcl.hIconSm=LoadIcon(NULL,IDI_WINLOGO); αντιστοιχα
Directx Δημοσ. 23 Μαΐου 2007 Δημοσ. 23 Μαΐου 2007 Ο κώδικας δεν έχει πρόβλημα, σε παλαιότερους compiler απλά θα έπρεπε να κάνεις cast το wcl.lpfnWndProc ως (WNDPROC) δηλαδή wcl.lpfnWndProc=(WNDPROC)WindowFunc; Όμως στην περίπτωση σου το ζήτημα ξεκινά από τους compiler που χρησιμοποιείς, για την Borland Turbo C 2.01 δεν το συζητώ καν (πάω στοίχημα πως είναι DOS compiler) ενώ η DEV-C από ότι είδα υποστηρίζει ανάπτυξη Windows εφαρμογών οπότε ή υπάρχει κάποιο συντακτικό λάθος (τα "20wc"?) ή παίζει κάποια ρύθμιση. Τώρα όσον αφορά τον κώδικα, γίνεται μια χαρά compile αφού διορθώσεις όμως την PortQuitMessage σε PostQuitMessage (όπως παρατηρεί ο georgemarios) και αφαιρέσεις το "20" από τα "20wcl.hIcon" & "20wcl.hIconSm" (γιατί έβαλες το 20 μπροστά τους; ) . Αναρτώ τον κώδικα, διορθωμένο και σε πιο ευανάγνωστη μορφή (έγινε compile με την free CodeGear Turbo-C++ Explorer -http://www.turboexplorer.com/cpp). > #include<windows.h> LRESULT CALLBACK WindowFunc(HWND,UINT,WPARAM,LPARAM); char szWinName[]="MyWin"; int WINAPI WinMain(HINSTANCE hThisInst, HINSTANCE hPrevInst, LPSTR IpszArgs, int nWinMode) { HWND hwnd; MSG msg; WNDCLASSEX wcl; wcl.cbSize=sizeof(WNDCLASSEX); wcl.hInstance=hThisInst; wcl.lpszClassName=szWinName; wcl.lpfnWndProc=WindowFunc; wcl.style=0; wcl.hIcon=LoadIcon(NULL,IDI_APPLICATION); wcl.hIconSm=LoadIcon(NULL,IDI_WINLOGO); wcl.hCursor=LoadCursor(NULL, IDC_ARROW); wcl.lpszMenuName=NULL; wcl.cbClsExtra=0; wcl.cbWndExtra=0; wcl.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); if(!RegisterClassEx(&wcl)) return 0; hwnd=CreateWindow(szWinName, "Diablo Clock Ticker", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, HWND_DESKTOP, NULL, hThisInst, NULL); ShowWindow(hwnd,nWinMode); UpdateWindow(hwnd); while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } LRESULT CALLBACK WindowFunc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd, message,wParam, lParam); } return 0; } Καλή συνέχεια.
dalton85 Δημοσ. 24 Μαΐου 2007 Μέλος Δημοσ. 24 Μαΐου 2007 Ευχαριστω για τις απαντισεις σας. Θα κατεβασω την εκδοση του Directx και απο εκει θα προσπαθησω να βγαλω καποια ακρη
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.