DialogBoxParam size

Discussion in 'WASM.BEGINNERS' started by calidus, May 13, 2008.

  1. calidus

    calidus Member

    Blog Posts:
    0
    Мне нужно чтобы диологовое окно с функции DialogBoxParam было во весь экран =) , какое событие использовать или какие есть варианты =)
     
  2. Com[e]r

    Com[e]r Com[e]r

    Blog Posts:
    0
    http://nehe.gamedev.net/default.asp
    Lessons, там сорец из средних качай под твою систему, твой компилятор,
    там отдельной функцией создание окна на весь экран.
    против прозрачных окошек юзай TOPMOST.
     
  3. DEEP

    DEEP Андрей

    Blog Posts:
    0
    Нужно, имхо, в ресурсе, откуда делается загрузка, заранее проставить флаг WS_MAXIMIZE. Если не помогает (хз пчм так, но у меня ресурс-вьювер этот флаг игнорирует, а прогу для проверки на ночь глядя писать лень) - тогда нужно в обработчике WM_INITDIALOG послать самому себе WM_SYSCOMMAND с флагом SC_MAXIMIZE.
     
  4. calidus

    calidus Member

    Blog Posts:
    0
    =) Спасибо , попробую отпишусь !
     
  5. calidus

    calidus Member

    Blog Posts:
    0
    Code (Text):
    1. #define IDD_DLG1 1000
    2. #define IDC_LST1 1001
    3. #define IDC_EDT1 1002
    4. #define IDC_BTN1 1003
    5.  
    6. IDD_DLG1 DIALOGEX 6,5,298,135
    7. FONT 8,"MS Sans Serif",0,0,0
    8. STYLE WS_POPUP|WS_VISIBLE|DS_CENTER|DS_SETFOREGROUND|DS_SETFONT
    9. EXSTYLE WS_EX_TOPMOST
    10. BEGIN
    11.   CONTROL "",IDC_LST1,"ListBox",WS_CHILD|WS_VISIBLE|WS_VSCROLL|WS_HSCROLL|WS_TABSTOP|LBS_NOINTEGRALHEIGHT|LBS_HASSTRINGS|LBS_NOTIFY,0,0,298,109,WS_EX_CLIENTEDGE|WS_EX_TOPMOST
    12.   CONTROL "",IDC_EDT1,"Edit",WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_MULTILINE,0,108,244,26,WS_EX_CLIENTEDGE
    13.   CONTROL "Send",IDC_BTN1,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,244,108,54,26
    14. END
    Почему компилер Рс из пакета масм9 не понимает это STYLE WS_POPUP|WS_VISIBLE|DS_CENTER|DS_SETFOREGROUND|DS_SETFONT

    а это понимает

    STYLE 0x91000A40
    EXSTYLE 0x00000008

    Хотя первый вариант с новой программы а второй со старой ?!
     
  6. diamond

    diamond New Member

    Blog Posts:
    0
    calidus
    "#include <windows.h>" в файле ресурсов пробовал сделать?
     
  7. calidus

    calidus Member

    Blog Posts:
    0
    Code (Text):
    1.     @@init:
    2. invoke SendMessage,[a_hdlg],WM_SYSCOMMAND,SC_MAXIMIZE,0
    Code (Text):
    1.     mov eax,[a_msg]
    2.    
    3.     cmp eax,WM_CLOSE
    4.     jz  @@close
    5.     cmp eax,WM_INITDIALOG
    6.     jz  @@init
    7.     cmp eax,WM_COMMAND
    8.     jz  @@command
    9.     cmp eax,WM_KEYUP
    10.     jz  @@key_up
    11.     cmp eax,WM_CTLCOLORDLG
    12.     jz  @@setcol
    не работает =(
     
  8. calidus

    calidus Member

    Blog Posts:
    0
    Да я уже разобрался ))) спасибо !!! но растягивание на весь экран видимый не работает =(
     
  9. Com[e]r

    Com[e]r Com[e]r

    Blog Posts:
    0
    calidus
    сказано тебе - аналогично с переходом в fullscreen, а ты "ножной мяч", "ножной мяч"..
     
  10. diamond

    diamond New Member

    Blog Posts:
    0
    calidus
    Чтобы окно можно было максимизировать через WM_SYSCOMMAND, у него должен быть установлен стиль WS_MAXIMIZEBOX. (Хотя, может быть, и WS_MAXIMIZE.)
     
  11. DEEP

    DEEP Андрей

    Blog Posts:
    0
    Затык, видимо, вот здесь:
    STYLE WS_POPUP|WS_VISIBLE|DS_CENTER|DS_SETFOREGROUND|DS_SETFONT
    меняем на
    STYLE WS_MAXIMIZE|WS_POPUP|WS_VISIBLE|DS_CENTER|DS_SETFOREGROUND|DS_SETFONT

    теоретически должно сработать...
     
  12. wasm_test

    wasm_test wasm test user

    Blog Posts:
    0
    ShowWindow (hWnd, SW_SHOWMAXIMIZED) в WM_INITDIALOG.
    никаких стилей не надо.
    не трахаем друг другу мозги))
     
  13. calidus

    calidus Member

    Blog Posts:
    0
    Ага Спасибо ! Все заработало ))))))

    Да я просто поменял менеджер ресурсов и он немного другой стал =) но потом максимизед я добавил.

    Эммм да , там в свойствах 2 сразу есть , 3 комбинации всего. Все попробовал не пашет. но уже подругому сделано

    Comer_ ой комер ! я тя знаю , ты как ченить скажешь =)))) лень мне те коды смотреть , знаю что есть проще ! ( и не спорь ! а то будет как джепегом )
     
  14. calidus

    calidus Member

    Blog Posts:
    0
    =) проблема теперь другая , едит бокс и другие компоненты не посередине. Как их на середину устанвить в большом окне. В свойствах ресурсов вроде нет центрирования
     
  15. diamond

    diamond New Member

    Blog Posts:
    0
    MoveWindow(GetDlgItem(hDlg, id), ...) Правильные координаты придётся рассчитывать вручную.
     
  16. calidus

    calidus Member

    Blog Posts:
    0
    Вот как ... а если их много ? .. 1 листбокс или едит бокс еще ладно а все , сохранится при этом компоновка. Хотя поидее должна.
     
  17. wasm_test

    wasm_test wasm test user

    Blog Posts:
    0
    я писал парочку функций чтобы правильно размещались контролы в диалоге независимо от его размера. а сам диалог делал sizeable. получается весьма симпотишно
     
  18. Com[e]r

    Com[e]r Com[e]r

    Blog Posts:
    0
    calidus
    о, нифига, я знаменит!..

    ну я то думал ты фуллскрин хочешь, в противном случае ты б уже давно F1 нажал и в win32sdk.hlp сам всё изучил.
     
  19. calidus

    calidus Member

    Blog Posts:
    0
    =) не мог бы ты показать
     
  20. wasm_test

    wasm_test wasm test user

    Blog Posts:
    0
    Code (Text):
    1. enum _ITEMPOSITION { IP_CENTERED, IP_BORDERFIXED, IP_RBORDERFIXED, IP_TOBORDER, IP_FIXED };
    2. void SetItemPosition(HWND hWnd, UINT Item,
    3.                      _ITEMPOSITION LeftPos, UINT LeftValue,
    4.                      _ITEMPOSITION TopPos, UINT TopValue,
    5.                      _ITEMPOSITION WidthPos, UINT Width,
    6.                      _ITEMPOSITION HeightPos, UINT Height,
    7.                      BOOLEAN IncludeParagraph)
    8. {
    9.     UINT x=0, y=0, sx=Width, sy=Height;
    10.     RECT rt;
    11.  
    12.     GetClientRect(hWnd, &rt);
    13.  
    14.     switch(LeftPos)
    15.     {
    16.  
    17.     case IP_CENTERED:
    18.        
    19.         x = (rt.right-Width)/2;
    20.         break;
    21.  
    22.     case IP_BORDERFIXED:
    23.  
    24.         x = rt.right - LeftValue;
    25.         break;
    26.  
    27.     case IP_RBORDERFIXED:
    28.  
    29.         x = rt.right - Width - LeftValue;
    30.         break;
    31.  
    32.     case IP_FIXED:
    33.  
    34.         x = LeftValue;
    35.         break;
    36.  
    37.     }
    38.  
    39.     switch(TopPos)
    40.     {
    41.  
    42.     case IP_CENTERED:
    43.  
    44.         y = (rt.bottom-Height)/2;
    45.         break;
    46.  
    47.     case IP_BORDERFIXED:
    48.  
    49.         y = rt.bottom - TopValue;
    50.         break;
    51.  
    52.     case IP_RBORDERFIXED:
    53.  
    54.         y = rt.bottom - Height - TopValue;
    55.         break;
    56.  
    57.     case IP_FIXED:
    58.  
    59.         y = TopValue;
    60.         break;
    61.  
    62.     }
    63.  
    64.     switch(WidthPos)
    65.     {
    66.  
    67.     case IP_TOBORDER:
    68.  
    69.         sx = WindowWidth(hWnd) - x - (IncludeParagraph?12:0) + Width;
    70.         break;
    71.  
    72.     }
    73.  
    74.     switch(HeightPos)
    75.     {
    76.  
    77.     case IP_TOBORDER:
    78.  
    79.         sy = WindowHeight(hWnd) - y - (IncludeParagraph?12:0) + Height;
    80.         break;
    81.  
    82.     }
    83.  
    84.     if( IncludeParagraph )
    85.     {
    86.         x += 12;
    87.         y += 12;
    88.         sx -= 12;
    89.         sy -= 12;
    90.     }
    91.  
    92.     MoveWindow(GetDlgItem(hWnd,Item), x, y, sx, sy, TRUE);
    93. }
    можно "цеплять" контрол к центру окна, к границам и т.п. с определенным отступом
    например юзать так:

    Code (Text):
    1. case WM_SIZE:
    2.         SetItemPosition(hWnd, IDCANCEL, IP_CENTERED, 0, IP_RBORDERFIXED, 20, IP_FIXED, 77, IP_FIXED, 23, FALSE);
    3.         SetItemPosition(hWnd, IDC_REDBUTTON, IP_RBORDERFIXED, 12, IP_RBORDERFIXED, 12, IP_FIXED, 350, IP_FIXED, 30, FALSE);
    4.         SetItemPosition(hWnd, IDC_SERVERS, IP_FIXED, 0, IP_FIXED, 0, IP_FIXED, 110, IP_TOBORDER, 0, TRUE );
    5.         SetItemPosition(hWnd, IDC_STATIC_SERVERGROUP, IP_FIXED, 112, IP_FIXED, 0, IP_TOBORDER, 2, IP_TOBORDER, 2, TRUE );
    6. ...