inzynier1979 Temat założony przez niniejszego użytkownika |
winapi-otwieranie okna za pomoca nowe okno otwiera nowe okno ale nie otwiera nowego okna pojade kod » 2023-08-23 17:00:56 podaje kod z ktorym mam problem kompiluje sie otwiera sie okno klikam nowe okno otwiera sie w nastepnym oknie klikam na nowe okno i nie dziala nie otwiera nowego okna #include <windows.h> #include <tchar.h> #include <string> #include <fstream> #include <locale> #include <codecvt> #include <commdlg.h>
#define IDM_FILE_SAVE 4 #define IDM_FILE_OPEN 2 #define IDM_EDIT_COPY 11 #define IDM_FILE_SAVEAS 5 #define IDM_FILE_NEW 6 #define IDM_FILE_NEW_WINDOW 7 #define IDM_EDIT_UNDO 8 #define IDM_EDIT_PASTE 9 #define IDM_EDIT_CUT 10 #define IDM_EDIT_SELECTALL 11 #define IDM_EDIT_WRAP 12 #define IDM_FORMAT_FONT 13 #define IDM_EDIT 14 #define IDM_EDIT_SELECTALL_MAIN 15 #define IDM_VIEW_ZOOM_IN 16 HWND hwndEditNoweOkno = NULL; HWND hwndEdit = NULL; bool isTextWrapped = false; LRESULT CALLBACK WindowProcedure( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam ); void CreateNewWindow();
TCHAR szClassName[ ] = _T( "CodeBlocksWindowsApp" );
int WINAPI WinMain( HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nCmdShow ) { HWND hwnd; MSG messages; WNDCLASSEX wincl; wincl.cbSize = sizeof( WNDCLASSEX ); wincl.style = CS_DBLCLKS; wincl.lpfnWndProc = WindowProcedure; wincl.cbClsExtra = 0; wincl.cbWndExtra = 0; wincl.hInstance = hThisInstance; wincl.hIcon = LoadIcon( NULL, IDI_APPLICATION ); wincl.hCursor = LoadCursor( NULL, IDC_ARROW ); wincl.hbrBackground =( HBRUSH ) COLOR_BACKGROUND; wincl.lpszMenuName = NULL; wincl.lpszClassName = szClassName; wincl.hIconSm = LoadIcon( NULL, IDI_APPLICATION ); if( !RegisterClassEx( & wincl ) ) return 0; hwnd = CreateWindowEx( 0, szClassName, _T( "notatnik alfa 1" ), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 800, 600, HWND_DESKTOP, NULL, hThisInstance, NULL ); HMENU hMenu = CreateMenu(); HMENU hFileMenu = CreateMenu(); AppendMenu( hMenu, MF_POPUP,( UINT_PTR ) hFileMenu, _T( "Plik" ) ); AppendMenu( hFileMenu, MF_STRING, IDM_FILE_NEW, _T( "Nowy" ) ); AppendMenu( hFileMenu, MF_STRING, IDM_FILE_NEW_WINDOW, _T( "Nowe okno" ) ); AppendMenu( hFileMenu, MF_STRING, IDM_FILE_OPEN, _T( "Otworz" ) ); AppendMenu( hFileMenu, MF_STRING, IDM_FILE_SAVE, _T( "Zapisz" ) ); AppendMenu( hFileMenu, MF_STRING, IDM_FILE_SAVEAS, _T( "Zapisz jako" ) ); HMENU hEditMenu = CreatePopupMenu(); AppendMenu( hMenu, MF_POPUP,( UINT_PTR ) hEditMenu, _T( "Edycja" ) ); AppendMenu( hEditMenu, MF_STRING, IDM_EDIT_UNDO, _T( "Cofnij" ) ); AppendMenu( hEditMenu, MF_STRING, IDM_EDIT_COPY, _T( "Kopiuj" ) ); AppendMenu( hEditMenu, MF_STRING, IDM_EDIT_PASTE, _T( "Wklej" ) ); AppendMenu( hEditMenu, MF_STRING, IDM_EDIT_CUT, _T( "Wytnij" ) ); AppendMenu( hEditMenu, MF_STRING, IDM_EDIT_SELECTALL_MAIN, _T( "Zaznacz wszystko" ) ); HMENU hFormatMenu = CreatePopupMenu(); AppendMenu( hMenu, MF_POPUP,( UINT_PTR ) hFormatMenu, _T( "Format" ) ); AppendMenu( hFormatMenu, MF_STRING, IDM_EDIT_WRAP, _T( "Zawijanie wierszy" ) ); AppendMenu( hFormatMenu, MF_STRING, IDM_FORMAT_FONT, _T( "Czcionka" ) ); HMENU hViewMenu = CreatePopupMenu(); AppendMenu( hMenu, MF_POPUP,( UINT_PTR ) hViewMenu, _T( "Widok" ) ); AppendMenu( hViewMenu, MF_STRING, IDM_VIEW_ZOOM_IN, _T( "Powiekszanie" ) ); HMENU hHelpMenu = CreatePopupMenu(); AppendMenu( hMenu, MF_POPUP,( UINT_PTR ) hHelpMenu, _T( "Pomoc" ) ); SetMenu( hwnd, hMenu ); hwndEditNoweOkno = CreateWindowEx( WS_EX_CLIENTEDGE, _T( "EDIT" ), NULL, WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_MULTILINE | ES_AUTOVSCROLL, 0, 0, 800, 600, hwnd, ( HMENU ) IDM_EDIT, hThisInstance, NULL ); ShowWindow( hwnd, nCmdShow ); while( GetMessage( & messages, NULL, 0, 0 ) ) { TranslateMessage( & messages ); DispatchMessage( & messages ); } return messages.wParam; }
LRESULT CALLBACK WindowProcedure( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam ) { switch( message ) { case WM_COMMAND: switch( LOWORD( wParam ) ) { case IDM_FILE_NEW_WINDOW: CreateNewWindow(); break; case IDM_EDIT_CUT: { SendMessage( hwndEdit, WM_CUT, 0, 0 ); } break; case IDM_FORMAT_FONT: { CHOOSEFONT cf; LOGFONT lf; HFONT currentFont =( HFONT ) SendMessage( hwndEdit, WM_GETFONT, 0, 0 ); GetObject( currentFont, sizeof( LOGFONT ), & lf ); ZeroMemory( & cf, sizeof( cf ) ); cf.lStructSize = sizeof( CHOOSEFONT ); cf.hwndOwner = hwnd; cf.lpLogFont = & lf; cf.Flags = CF_SCREENFONTS | CF_EFFECTS | CF_INITTOLOGFONTSTRUCT; if( ChooseFont( & cf ) ) { HFONT newFont = CreateFontIndirect( & lf ); SendMessage( hwndEdit, WM_SETFONT,( WPARAM ) newFont, TRUE ); } } break; case IDM_FILE_NEW: SendMessage( hwndEdit, WM_SETTEXT, NULL,( LPARAM ) _T( "" ) ); break; case IDM_EDIT_UNDO: { SendMessage( hwndEdit, EM_UNDO, 0, 0 ); } break; case IDM_EDIT_SELECTALL_MAIN: SendMessage( hwndEdit, EM_SETSEL, 0, - 1 ); break; case IDM_FILE_OPEN: { OPENFILENAME ofn; TCHAR szFileName[ MAX_PATH ] = { 0 }; TCHAR szFilter[ ] = _T( "Text Files (*.txt)\0*.txt\0All Files (*.*)\0*.*\0" ); ZeroMemory( & ofn, sizeof( ofn ) ); ofn.lStructSize = sizeof( ofn ); ofn.hwndOwner = hwnd; ofn.lpstrFilter = szFilter; ofn.lpstrFile = szFileName; ofn.nMaxFile = MAX_PATH; ofn.Flags = OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST; if( GetOpenFileName( & ofn ) ) { std::wifstream file( ofn.lpstrFile ); if( file.is_open() ) { file.imbue( std::locale( file.getloc(), new std::codecvt_utf8_utf16 < wchar_t > ) ); std::wstring fileContent(( std::istreambuf_iterator < wchar_t >( file ) ), std::istreambuf_iterator < wchar_t >() ); SendMessage( hwndEdit, WM_SETTEXT, NULL,( LPARAM ) fileContent.c_str() ); file.close(); } else { MessageBox( hwnd, _T( "Failed to open file!" ), _T( "Error" ), MB_OK | MB_ICONERROR ); } } } break; case IDM_FILE_SAVE: { OPENFILENAME ofn; TCHAR szFile[ 260 ] = { 0 }; ZeroMemory( & ofn, sizeof( ofn ) ); ofn.lStructSize = sizeof( ofn ); ofn.hwndOwner = hwnd; ofn.lpstrFilter = _T( "Text Files (*.txt)\0*.txt\0All Files (*.*)\0*.*\0" ); ofn.lpstrFile = szFile; ofn.nMaxFile = sizeof( szFile ); ofn.Flags = OFN_OVERWRITEPROMPT; if( GetSaveFileName( & ofn ) ) { int textLength = SendMessage( hwndEdit, WM_GETTEXTLENGTH, 0, 0 ); std::wstring buffer( textLength + 1, L'\0' ); SendMessage( hwndEdit, WM_GETTEXT, textLength + 1,( LPARAM ) buffer.data() ); std::wofstream file( ofn.lpstrFile ); if( file.is_open() ) { file.imbue( std::locale( file.getloc(), new std::codecvt_utf8_utf16 < wchar_t > ) ); file << buffer; file.close(); MessageBox( hwnd, _T( "Plik został zapisany pomyślnie!" ), _T( "Sukces" ), MB_OK ); } else { MessageBox( hwnd, _T( "Błąd podczas zapisywania pliku!" ), _T( "Błąd" ), MB_OK | MB_ICONERROR ); } } } break; case IDM_FILE_SAVEAS: { OPENFILENAME ofn; TCHAR szFile[ 260 ] = { 0 }; ZeroMemory( & ofn, sizeof( ofn ) ); ofn.lStructSize = sizeof( ofn ); ofn.hwndOwner = hwnd; ofn.lpstrFilter = _T( "All Files (*.*)\0*.*\0" ); ofn.lpstrFile = szFile; ofn.nMaxFile = sizeof( szFile ); ofn.Flags = OFN_OVERWRITEPROMPT; if( GetSaveFileName( & ofn ) ) { int textLength = SendMessage( hwndEdit, WM_GETTEXTLENGTH, 0, 0 ); std::wstring buffer( textLength + 1, L'\0' ); SendMessage( hwndEdit, WM_GETTEXT, textLength + 1,( LPARAM ) buffer.data() ); std::wofstream file( ofn.lpstrFile ); if( file.is_open() ) { file.imbue( std::locale( file.getloc(), new std::codecvt_utf8_utf16 < wchar_t > ) ); file << buffer; file.close(); MessageBox( hwnd, _T( "Plik został zapisany pomyślnie!" ), _T( "Sukces" ), MB_OK ); } else { MessageBox( hwnd, _T( "Błąd podczas zapisywania pliku!" ), _T( "Błąd" ), MB_OK | MB_ICONERROR ); } } } break; case IDM_EDIT_COPY: SendMessage( hwndEdit, WM_COPY, 0, 0 ); break; case IDM_EDIT_PASTE: SendMessage( hwndEdit, WM_PASTE, 0, 0 ); break; case IDM_EDIT_WRAP: { isTextWrapped = !isTextWrapped; DWORD wrapStyle = isTextWrapped ? WS_VISIBLE | WS_VSCROLL | ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | WS_HSCROLL : WS_VISIBLE | WS_VSCROLL | ES_MULTILINE | ES_AUTOVSCROLL; SetWindowLongPtr( hwndEdit, GWL_STYLE, wrapStyle ); SetWindowPos( hwndEdit, NULL, 0, 0, 800, 600, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED ); } break; default: return DefWindowProc( hwnd, message, wParam, lParam ); } break; case WM_CREATE: hwndEdit = CreateWindowEx( WS_EX_CLIENTEDGE, _T( "EDIT" ), NULL, WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_MULTILINE | ES_AUTOVSCROLL, 0, 0, 800, 600, hwnd, ( HMENU ) IDM_EDIT, GetModuleHandle( NULL ), NULL ); break; case WM_DESTROY: PostQuitMessage( 0 ); break; default: return DefWindowProc( hwnd, message, wParam, lParam ); } return 0; }
void CreateNewWindow() { HINSTANCE hInstance = GetModuleHandle( NULL ); WNDCLASSEX wincl; wincl.cbSize = sizeof( WNDCLASSEX ); wincl.style = CS_DBLCLKS; wincl.lpfnWndProc = WindowProcedure; wincl.cbClsExtra = 0; wincl.cbWndExtra = 0; wincl.hInstance = hInstance; wincl.hIcon = LoadIcon( NULL, IDI_APPLICATION ); wincl.hCursor = LoadCursor( NULL, IDC_ARROW ); wincl.hbrBackground =( HBRUSH ) COLOR_BACKGROUND; wincl.lpszMenuName = NULL; wincl.lpszClassName = _T( "NewCodeBlocksWindowsApp" ); wincl.hIconSm = LoadIcon( NULL, IDI_APPLICATION ); if( !RegisterClassEx( & wincl ) ) return; HWND hwndEditNoweOkno = CreateWindowEx( 0, wincl.lpszClassName, _T( "notatnik alfa 1" ), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 800, 600, NULL, NULL, hInstance, NULL ); HMENU hMenu = CreateMenu(); HMENU hFileMenu = CreateMenu(); AppendMenu( hMenu, MF_POPUP,( UINT_PTR ) hFileMenu, _T( "Plik" ) ); AppendMenu( hFileMenu, MF_STRING, IDM_FILE_NEW, _T( "Nowy" ) ); AppendMenu( hFileMenu, MF_STRING, IDM_FILE_NEW_WINDOW, _T( "Nowe okno" ) ); AppendMenu( hFileMenu, MF_STRING, IDM_FILE_OPEN, _T( "Otwórz" ) ); AppendMenu( hFileMenu, MF_STRING, IDM_FILE_SAVE, _T( "Zapisz" ) ); AppendMenu( hFileMenu, MF_STRING, IDM_FILE_SAVEAS, _T( "Zapisz jako" ) ); HMENU hEditMenu = CreatePopupMenu(); AppendMenu( hMenu, MF_POPUP,( UINT_PTR ) hEditMenu, _T( "Edycja" ) ); AppendMenu( hEditMenu, MF_STRING, IDM_EDIT_UNDO, _T( "Cofnij" ) ); AppendMenu( hEditMenu, MF_STRING, IDM_EDIT_COPY, _T( "Kopiuj" ) ); AppendMenu( hEditMenu, MF_STRING, IDM_EDIT_PASTE, _T( "Wklej" ) ); AppendMenu( hEditMenu, MF_STRING, IDM_EDIT_CUT, _T( "Wytnij" ) ); AppendMenu( hEditMenu, MF_STRING, IDM_EDIT_SELECTALL_MAIN, _T( "Zaznacz wszystko" ) ); HMENU hFormatMenu = CreatePopupMenu(); AppendMenu( hMenu, MF_POPUP,( UINT_PTR ) hFormatMenu, _T( "Format" ) ); AppendMenu( hFormatMenu, MF_STRING, IDM_EDIT_WRAP, _T( "Zawijanie wierszy" ) ); AppendMenu( hFormatMenu, MF_STRING, IDM_FORMAT_FONT, _T( "Czcionka" ) ); HMENU hViewMenu = CreatePopupMenu(); AppendMenu( hMenu, MF_POPUP,( UINT_PTR ) hViewMenu, _T( "Widok" ) ); HMENU hHelpMenu = CreatePopupMenu(); AppendMenu( hMenu, MF_POPUP,( UINT_PTR ) hHelpMenu, _T( "Pomoc" ) ); SetMenu( hwndEditNoweOkno, hMenu ); CreateWindowEx( WS_EX_CLIENTEDGE, _T( "EDIT" ), NULL, WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_MULTILINE | ES_AUTOVSCROLL, 0, 0, 800, 600, hwndEditNoweOkno, ( HMENU ) IDM_EDIT, GetModuleHandle( NULL ), NULL ); ShowWindow( hwndEditNoweOkno, SW_SHOW ); }
|