piotrusbor Temat założony przez niniejszego użytkownika |
OK » 2013-01-22 15:08:55 Tylko, żeby nie było, że zaśmiecam na forach :):) Witam, Pytałem już o to na innym forum ale niestety nie uzyskałem satysfakcjonującej mnie odpowiedzi. Dodam że może być to ważne iż piszę programik w VS 2010 EXPRESS. Mój problem to utworzenie okna dziecka po naciśnięciu buttona w oknie rodzica. Znalazłem całą procedurę tworzenia i co najlepsze wszystko się ładnie kompiluje i działa jak powinno--> Link do postu tylko jest inaczej napisane co pewnie wiąże się z programem w którym było tworzone. Ja u siebie na VS 2010 Exp. mam taki kod, który został wygenerowany przez VS i powiększony nieco przeze mnie. Wygląda to tak: #include "stdafx.h" #include "jjj.h"
#define MAX_LOADSTRING 100
HINSTANCE hInst; 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_JJJ, szWindowClass, MAX_LOADSTRING ); MyRegisterClass( hInstance ); if( !InitInstance( hInstance, nCmdShow ) ) { return FALSE; } hAccelTable = LoadAccelerators( hInstance, MAKEINTRESOURCE( IDC_JJJ ) ); while( GetMessage( & msg, NULL, 0, 0 ) ) { if( !TranslateAccelerator( msg.hwnd, hAccelTable, & 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_JJJ ) ); wcex.hCursor = LoadCursor( NULL, IDC_ARROW ); wcex.hbrBackground =( HBRUSH )( COLOR_WINDOW + 1 ); wcex.lpszMenuName = MAKEINTRESOURCE( IDC_JJJ ); wcex.lpszClassName = szWindowClass; wcex.hIconSm = LoadIcon( wcex.hInstance, MAKEINTRESOURCE( IDI_SMALL ) ); return RegisterClassEx( & wcex ); WNDCLASSEX wcex1; wcex1.lpfnWndProc = WndProcChild; wcex1.cbClsExtra = 0; wcex1.cbWndExtra = 0; wcex1.hInstance = hInstance; wcex1.lpszClassName = szWindowClassChild; return RegisterClassEx( & wcex ); }
BOOL InitInstance( HINSTANCE hInstance, int nCmdShow ) { HWND hWnd, noweOkno; hInst = hInstance; hWnd = CreateWindow( szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, 0, 0, 300, 200, NULL, NULL, hInstance, NULL ); noweOkno = CreateWindow( szWindowClassChild, "", WS_OVERLAPPEDWINDOW, 0, 0, 300, 200, hWnd, NULL, hInst, NULL ); ShowWindow( hWnd, nCmdShow ); UpdateWindow( hWnd ); return TRUE; }
LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ) { HWND hRysuj, noweOkno; int wmId, wmEvent; PAINTSTRUCT ps; HDC hdc; switch( message ) { case WM_CREATE: hRysuj = CreateWindow( "button", "Rysuj", WS_CHILD | WS_VISIBLE, 10, 10, 100, 20, hWnd,( HMENU ) 1001, hInst, 0 ); break; case WM_COMMAND: wmId = LOWORD( wParam ); wmEvent = HIWORD( wParam ); switch( wmId ) { case 1001: ShowWindow( noweOkno, SW_SHOW ); break; 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 ) { 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; }
No i niestety ale nie działa jak powinno, a kompilator wywala błąd noweOkno 0xcccccccc { unused =??? } HWND__ * Może wy mi pomożecie, wskażecie błąd ? Nie mam już siły, pomysłu na ten pewnie dość banalny błąd którego nie mogę odszukać...... Błąd wywala w linii 125:127. |