berkov Temat założony przez niniejszego użytkownika  | 
[WinAPI, MDI] Okienka nie są odświeżane » 2013-11-09 12:48:29 Hey ho. Problem, czy ktos poradzi czemu okienka MDI jakby nie chcialy sie "odswiezac"? screenshot pod: int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
  {     info->version = 1.01;     info->release = 20131106;          WNDCLASSEX wMain;     wMain.cbSize = sizeof( WNDCLASSEX );     wMain.style = CS_DBLCLKS;     wMain.lpfnWndProc = WndProc_MAIN;     wMain.cbClsExtra = 0;     wMain.cbWndExtra = 0;     wMain.hInstance = hInstance;     wMain.hIconSm = LoadIcon( hInstance, MAKEINTRESOURCE( ICON_MAIN ) );     wMain.hIcon = LoadIcon( hInstance, MAKEINTRESOURCE( ICON_MAIN ) );     wMain.hCursor = LoadCursor( NULL, IDC_ARROW );     wMain.hbrBackground = 0;     wMain.lpszMenuName = NULL;     wMain.lpszClassName = mainclass;          RegisterClassEx( & wMain );          wMain.lpfnWndProc = WndProc_CHILD;     wMain.lpszMenuName =( LPCTSTR ) NULL;     wMain.lpszClassName = childclass;          RegisterClassEx( & wMain );               hMain = CreateWindowEx( 0, mainclass,( _bstr_t ) "App " +( _bstr_t ) info->version, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,     CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL );     if( hMain == NULL )     {         MessageBox( NULL, "Blad CreateWindowEx - hMain!", "...", MB_ICONEXCLAMATION );         return 1;     }     ShowWindow( hMain, nCmdShow );               CLIENTCREATESTRUCT ccs;     RECT okno;          ccs.hWindowMenu = NULL;     ccs.idFirstChild = ID_MDI_FIRSTCHILD;     GetClientRect( hMain, & okno );          hMDIClient = CreateWindowEx( 0, "MDICLIENT",( LPCTSTR ) NULL, WS_CHILD | WS_CLIPCHILDREN | WS_VSCROLL | WS_HSCROLL,     100, 0, okno.right - 100, okno.bottom, hMain,( HMENU ) 0xCAC, hInstance,( LPSTR ) & ccs );               if( hMDIClient == NULL )     {         MessageBox( NULL, "Blad CreateWindowEx - hMDIClient!", "...", MB_ICONEXCLAMATION );         return 1;     }          ShowWindow( hMDIClient, SW_SHOW );                    hNew = CreateWindowEx( 0, "BUTTON", "Nowy", WS_CHILD | WS_VISIBLE,     5, 5, 90, 30, hMain,( HMENU ) ID_NEW, hInstance, NULL );     hNONMDI = CreateWindowEx( 0, "BUTTON", "NonMDI", WS_CHILD | WS_VISIBLE,     5, 40, 90, 30, hMain,( HMENU ) ID_NONMDI, hInstance, NULL );     hSort = CreateWindowEx( 0, "BUTTON", "Sort", WS_CHILD | WS_VISIBLE,     5, 75, 90, 30, hMain,( HMENU ) ID_SORT, hInstance, NULL );                    while( GetMessage( & Komunikat, NULL, 0, 0 ) )     {         if( !TranslateMDISysAccel( hMDIClient, & Komunikat ) )         {             TranslateMessage( & Komunikat );             DispatchMessage( & Komunikat );         }     }          return 0; }
  LRESULT CALLBACK WndProc_MAIN( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ) {     switch( msg )     {     case WM_CLOSE:         DestroyWindow( hwnd );         break;              case WM_SIZE:         {             RECT okno;             GetClientRect( hwnd, & okno );             SetWindowPos( hMDIClient, NULL, 100, 0, okno.right - 100 - 1, okno.bottom - 1, SWP_SHOWWINDOW );         }         break;              case WM_COMMAND:         switch( wParam )         {         case ID_NEW: {                 MDICREATESTRUCT mcs;                 HWND hChild;                                  mcs.szTitle = "Nowe okno MDI";                 mcs.szClass = childclass;                 mcs.hOwner = GetModuleHandle( NULL );                 mcs.x = 20;                 mcs.y = 20;                 mcs.cx = 555;                 mcs.cy = 333;                 mcs.style = MDIS_ALLCHILDSTYLES | WS_SYSMENU | CS_DBLCLKS;                                  hChild =( HWND ) SendMessage( hMDIClient, WM_MDICREATE, 0,( LONG ) & mcs );                                  if( !hChild ) {                     MessageBox( hwnd, "Nie udalo sie otowrzyc okienka MDI!", "A to szkoda...",                     MB_ICONEXCLAMATION | MB_OK );                 }             }             break;         case ID_SORT:             SendMessage( hMDIClient, WM_MDITILE, MDITILE_HORIZONTAL, 0 );             break;         case ID_NONMDI:             { HWND hNONMDI;                 hNONMDI = CreateDialog( GetModuleHandle( 0 ), MAKEINTRESOURCE( IDD_KWP1 ), hMDIClient, WndProc_dKWP1 );             } break;                          default:             { }             break;         }         break;              case WM_DESTROY:         PostQuitMessage( 0 );         break;                  default:         return DefFrameProc( hwnd, hMDIClient, msg, wParam, lParam );         break;     }          return 0; } LRESULT CALLBACK WndProc_CHILD( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ) {     switch( msg )     {     case WM_CLOSE:         DestroyWindow( hwnd );         break;     case WM_CREATE: {             hMDIEdit = CreateWindowEx( WS_EX_CLIENTEDGE, "EDIT", NULL, WS_CHILD | WS_VISIBLE |             WS_BORDER | WS_VSCROLL | ES_MULTILINE | ES_AUTOVSCROLL, 0, 0, 400, 150,             hwnd,( HMENU ) ID_MDI_EDIT, GetModuleHandle( NULL ), NULL );             hSave = CreateWindowEx( 0, "BUTTON", "Zapisz", WS_CHILD | WS_VISIBLE,             5, 160, 150, 30, hwnd,( HMENU ) ID_SAVE, GetModuleHandle( NULL ), NULL );                          SetFocus( GetDlgItem( hwnd, ID_MDI_EDIT ) );         }         break;                       case WM_COMMAND:         switch( wParam )         {         case ID_SAVE:             break;                      default:             { }             break;         }         break;              case WM_DESTROY:         PostQuitMessage( 0 );         break;                  default:         return DefMDIChildProc( hwnd, msg, wParam, lParam );         break;     }          return 0; }
  kombinowalem juz ze stylami, z nadawaniem default wilkosci (CW_USEDEFAULT) i innymi parametrami przy tworzeniu okienek ale bez zadnego rezultatu.. nie mam juz pomyslu... b  | 
 | 
Monika90  | 
» 2013-11-09 13:21:40 Pewnie dlatego, że pędzel tła masz ustawiony na NULL:  wMain.hbrBackground = 0;  | 
 | 
berkov Temat założony przez niniejszego użytkownika  | 
» 2013-11-09 13:42:01 zmienilem..dodajac: wMain.hbrBackground =( HBRUSH ) COLOR_WINDOW;
   ale w obszarze mdi okienka dalej sie nie odswiezaja....
   | 
 | 
berkov Temat założony przez niniejszego użytkownika  | 
» 2013-11-09 13:53:52 Sorry... wprowadzilem w blad.... podzialalo ale tylko na okienka MDI...  Dialogi sie dalej nie odswiezaja: tak wyglada resources.rc: LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL IDD_KWP1 DIALOG 0, 0, 275, 114 STYLE DS_3DLOOK | WS_EX_MDICHILD | WS_CHILD | WS_VISIBLE CAPTION "KP / KW" FONT 8, "Verdana" {     DEFPUSHBUTTON "Zapisz", IDC_kwp1_zapisz, 203, 84, 50, 14, WS_TABSTOP     PUSHBUTTON "Anuluj", IDC_kwp1_anuluj, 147, 84, 50, 14, WS_TABSTOP     COMBOBOX IDC_kwp1_tytul, 68, 27, 168, 100, CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP     EDITTEXT IDC_kwp1_grosval, 68, 40, 63, 13, ES_AUTOHSCROLL | WS_TABSTOP     COMBOBOX IDC_kwp1_type, 133, 40, 103, 32, CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP     EDITTEXT IDC_kwp1_comment, 68, 53, 168, 22, ES_AUTOHSCROLL | WS_TABSTOP     LTEXT "Tytul:", IDC_STATIC, 25, 27, 18, 8, SS_LEFT     LTEXT "Kwota:", IDC_STATIC, 25, 40, 23, 8, SS_LEFT     LTEXT "Uwagi:", IDC_STATIC, 25, 54, 23, 8, SS_LEFT     LTEXT "Wprowadz KW/KP", IDC_STATIC, 13, 9, 62, 8, SS_LEFT      }
   | 
 | 
Monika90  | 
» 2013-11-09 14:09:00 STYLE DS_3DLOOK | WS_EX_MDICHILD | WS_CHILD | WS_VISIBLE
  WS_EX_MDICHILD to jest rozszerzony styl, więc nie powinien być razem ze zwykłymi. Ma być tak: EXSTYLE WS_EX_MDICHILD STYLE DS_3DLOOK | WS_CHILD | WS_VISIBLE
  Ale czy to pomoże, to nie wiem. Poza tym, w pętli komunikatów powinieneś wywoływać IsDialogMessage() dla każdego niemodalnego okna dialogowego.  | 
 | 
berkov Temat założony przez niniejszego użytkownika  | 
» 2013-11-09 14:26:54 ok.. usunalem WS_EX_MDICHILD  oraz dodalem do petli: while( GetMessage( & Komunikat, NULL, 0, 0 ) ) {          if( !IsDialogMessage( hNONMDI, & Komunikat ) &&     !TranslateMDISysAccel( hMDIClient, & Komunikat ) )     {         TranslateMessage( & Komunikat );         DispatchMessage( & Komunikat );     } }
  ..niestety bez zmian..:-( za jakiekolwiek inne pomysly Monika bede wdzieczny :-) dziwne, nigdy nie mialem takiego problemu dopoki nie zaczalem sie bawic MDI. ... b  | 
 | 
Monika90  | 
» 2013-11-09 14:54:10 if( !IsDialogMessage( hNONMDI, & Komunikat )
  W twoim programie hNONMDI to uchwyt do przycisku. Dodaj styl WS_CLIPSIBLINGS STYLE DS_3DLOOK | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CHILD
   | 
 | 
berkov Temat założony przez niniejszego użytkownika  | 
» 2013-11-09 15:45:10 Monika, MASZ MISTRZA!
  moge sie zapytac skad ty to wszystko wiesz? nigdy w zyciu bym na to nie wpadl!!!  | 
 | 
|  « 1 »  2 |