piotrusbor Temat założony przez niniejszego użytkownika |
» 2013-01-22 15:44:39 A czy zastosowanie czegos takiego da rezultat ? return RegisterClassEx( & wcex && & wcex1 ); ? Ehhh nie da już wiem ;/ |
|
piotrusbor Temat założony przez niniejszego użytkownika |
» 2013-01-23 12:04:51 Stara klasa została, a pod nią napisałem (przepisałem) nową klasę: ATOM MyRegisterClass( WNDPROC WndProcChild, char * szWindowClassChild ) { WNDCLASSEX wcex; wcex.cbSize = sizeof( WNDCLASSEX ); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = WndProcChild; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInst; wcex.hIcon = LoadIcon( hInst, MAKEINTRESOURCE( IDI_JJJ ) ); wcex.hCursor = LoadCursor( NULL, IDC_ARROW ); wcex.hbrBackground =( HBRUSH )( COLOR_WINDOW + 1 ); wcex.lpszMenuName = NULL; wcex.lpszClassName = szWindowClassChild; wcex.hIconSm = LoadIcon( wcex.hInstance, MAKEINTRESOURCE( IDI_SMALL ) ); return RegisterClassEx( & wcex ); }
Po MyRegisterClass( hInstance ); dałem MyRegisterClass( WndProcChild, szWindowClassChild ); i nic ;/ Okno się rysuje ale po naciśnięciu buttona mam Run-Time Check Failure #3 - The variable 'noweOkno' is being used without being initialized. |
|
xevuel |
» 2013-01-23 12:18:17 Po pierwsze, przetłumacz sobie to co dostałeś po kliknięciu przycisku. Po drugie, dlaczego brniesz w coś, o czym nie masz pojęcia, podczas gdy jest kilka innych dobrze opisanych dróg? |
|
piotrusbor Temat założony przez niniejszego użytkownika |
» 2013-01-23 12:41:13 No wiem że zmienna została użyta bez jej zainicjowania ale co dalej to już nie ;/;/ Problem jest w tym, że nie znam - inaczej nie znalazłem innej drogi lub nie zostałem odpowiednio nakierunkowany, a sęk w tym, że muszę dokończyć to co już mam napisane w moim innym prog. głównym. Tutaj podaję tylko to nad czym się zatrzymałem, stworzyłem sobie jakiś zwykły dokument w którym próbuję uzyskać efekt taki jaki jest mi właśnie potrzebny, czyli rysowanie nowego okna. No i niestety.... |
|
DejaVu |
» 2013-01-23 12:46:01 |
|
xevuel |
» 2013-01-23 12:46:20 Problem jest w tym, że nie znam - inaczej nie znalazłem innej drogi lub nie zostałem odpowiednio nakierunkowany |
Sam wskazałem Ci dwie najprostsze, a na innych forach pewnie podali ich jeszcze więcej... |
|
piotrusbor Temat założony przez niniejszego użytkownika |
» 2013-01-23 13:28:20 Dobra: Poczytaj o jednym i o drugim i sam dobierz, co wydaje Ci się bardziej odpowiednie. Ja wybrałbym raczej MDI.Ok więc biorę MDI. Czytam z kursu. Robię krok po kroku to co jest napisane. Otrzymuję co poniżej:
#include "stdafx.h" #include "projproj.h" #define MAX_LOADSTRING 100 #define ID_MDI_FIRSTCHILD 50000
HINSTANCE hInst; HWND hMDIClient; TCHAR szTitle[ MAX_LOADSTRING ]; TCHAR szWindowClass[ MAX_LOADSTRING ]; TCHAR szWindowClassChild[ MAX_LOADSTRING ];
ATOM MyRegisterClass( HINSTANCE hInstance ); BOOL InitInstance( HINSTANCE, int ); LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM ); LRESULT CALLBACK WndProcChild( HWND, UINT, WPARAM, LPARAM ); INT_PTR CALLBACK About( HWND, UINT, WPARAM, LPARAM );
int APIENTRY _tWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow ) { UNREFERENCED_PARAMETER( hPrevInstance ); UNREFERENCED_PARAMETER( lpCmdLine ); MSG msg; HACCEL hAccelTable; LoadString( hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING ); LoadString( hInstance, IDC_PROJPROJ, szWindowClass, MAX_LOADSTRING ); MyRegisterClass( hInstance ); if( !InitInstance( hInstance, nCmdShow ) ) { return FALSE; } hAccelTable = LoadAccelerators( hInstance, MAKEINTRESOURCE( IDC_PROJPROJ ) ); while( GetMessage( & msg, NULL, 0, 0 ) ) { if( !TranslateMDISysAccel( hMDIClient, & msg ) ) { TranslateMessage( & msg ); DispatchMessage( & msg ); } } return( int ) msg.wParam; }
ATOM MyRegisterClass( HINSTANCE hInstance ) { WNDCLASSEX wcex; wcex.cbSize = sizeof( WNDCLASSEX ); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = WndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = LoadIcon( hInstance, MAKEINTRESOURCE( IDI_PROJPROJ ) ); wcex.hCursor = LoadCursor( NULL, IDC_ARROW ); wcex.hbrBackground =( HBRUSH )( COLOR_WINDOW + 1 ); wcex.lpszMenuName = MAKEINTRESOURCE( IDC_PROJPROJ ); wcex.lpszClassName = szWindowClass; wcex.hIconSm = LoadIcon( wcex.hInstance, MAKEINTRESOURCE( IDI_SMALL ) ); wcex.lpfnWndProc = WndProcChild; wcex.lpszMenuName =( LPCTSTR ) NULL; wcex.lpszClassName = szWindowClassChild; return RegisterClassEx( & wcex ); }
BOOL InitInstance( HINSTANCE hInstance, int nCmdShow ) { HWND hWnd; hInst = hInstance; hWnd = CreateWindow( szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL ); if( !hWnd ) { return FALSE; } ShowWindow( hWnd, nCmdShow ); UpdateWindow( hWnd ); CLIENTCREATESTRUCT ccs; ccs.hWindowMenu = NULL; ccs.idFirstChild = ID_MDI_FIRSTCHILD; hMDIClient = CreateWindowEx( 0, szWindowClassChild,( LPCTSTR ) NULL, WS_CHILD | WS_CLIPCHILDREN | WS_VSCROLL | WS_HSCROLL, 5, 5, 640, 480, hWnd,( HMENU ) 0xCAC, hInstance,( LPSTR ) & ccs ); ShowWindow( hMDIClient, SW_SHOW ); return TRUE; }
LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ) { int wmId, wmEvent; PAINTSTRUCT ps; HDC hdc; switch( message ) { case WM_COMMAND: wmId = LOWORD( wParam ); wmEvent = HIWORD( wParam ); switch( wmId ) { case IDM_ABOUT: DialogBox( hInst, MAKEINTRESOURCE( IDD_ABOUTBOX ), hWnd, About ); break; case IDM_EXIT: DestroyWindow( hWnd ); break; default: return DefWindowProc( hWnd, message, wParam, lParam ); } break; case WM_PAINT: hdc = BeginPaint( hWnd, & ps ); EndPaint( hWnd, & ps ); break; case WM_DESTROY: PostQuitMessage( 0 ); break; default: return DefWindowProc( hWnd, message, wParam, lParam ); } return 0; }
INT_PTR CALLBACK About( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam ) { UNREFERENCED_PARAMETER( lParam ); switch( message ) { case WM_INITDIALOG: return( INT_PTR ) TRUE; case WM_COMMAND: if( LOWORD( wParam ) == IDOK || LOWORD( wParam ) == IDCANCEL ) { EndDialog( hDlg, LOWORD( wParam ) ); return( INT_PTR ) TRUE; } break; } return( INT_PTR ) FALSE; }
LRESULT CALLBACK WndProcChild( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ) { switch( message ) { default: return DefMDIChildProc( hWnd, message, wParam, lParam ); } return 0; }
I coś mignie, śmignie i koniec. Różnica pomiędzy tym co ja pisałem a tym co zostało zawarte w kursie to metoda tworzenia okna głównego w głównej funkcji, a w tym całym VS 2010Exp. jest jakoś inaczej .... Dlaczego okno główne w VS2010Exp. tworzone jest w BOOL InitInstance( HINSTANCE hInstance, int nCmdShow ) a nie w głównej funkcji ? Czy autor miał na celu ułatwienie czy cos innego ? No sam juz nie wiem gdzie robie te swoje głupie błędy ;/;/ |
|
xevuel |
» 2013-01-23 13:51:31 VS ma inny szablon projektu Windowsowego niż C::B czy Dev. Tak naprawdę nie ma to prawie żadnej różnicy w działaniu programu. Przeczytaj sobie od początku Kurs WinAPI, C++, zrozumiesz co robią poszczególne funkcje. A najlepszym rozwiązaniem będzie, jeśli skopiujesz ten kod podany w lekcji o MDI i zmodyfikujesz zgodnie ze swoimi potrzebami. |
|
1 « 2 » |