DialogBoxParam size

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

  1. calidus

    calidus Member

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

    Com[e]r Com[e]r

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

    DEEP Андрей

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

    calidus Member

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

    calidus Member

    Blog Posts:
    0
    Joined:
    Dec 27, 2005
    Messages:
    618
    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
    Joined:
    May 21, 2004
    Messages:
    507
    Location:
    Russia
    calidus
    "#include <windows.h>" в файле ресурсов пробовал сделать?
     
  7. calidus

    calidus Member

    Blog Posts:
    0
    Joined:
    Dec 27, 2005
    Messages:
    618
    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
    Joined:
    Dec 27, 2005
    Messages:
    618
    Да я уже разобрался ))) спасибо !!! но растягивание на весь экран видимый не работает =(
     
  9. Com[e]r

    Com[e]r Com[e]r

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

    diamond New Member

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

    DEEP Андрей

    Blog Posts:
    0
    Joined:
    Apr 27, 2008
    Messages:
    491
    Location:
    г. Владимир
    Затык, видимо, вот здесь:
    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
    Joined:
    Nov 24, 2006
    Messages:
    5,582
    ShowWindow (hWnd, SW_SHOWMAXIMIZED) в WM_INITDIALOG.
    никаких стилей не надо.
    не трахаем друг другу мозги))
     
  13. calidus

    calidus Member

    Blog Posts:
    0
    Joined:
    Dec 27, 2005
    Messages:
    618
    Ага Спасибо ! Все заработало ))))))

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

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

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

    calidus Member

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

    diamond New Member

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

    calidus Member

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

    wasm_test wasm test user

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

    Com[e]r Com[e]r

    Blog Posts:
    0
    Joined:
    Apr 20, 2007
    Messages:
    2,624
    Location:
    ого..
    calidus
    о, нифига, я знаменит!..

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

    calidus Member

    Blog Posts:
    0
    Joined:
    Dec 27, 2005
    Messages:
    618
    =) не мог бы ты показать
     
  20. wasm_test

    wasm_test wasm test user

    Blog Posts:
    0
    Joined:
    Nov 24, 2006
    Messages:
    5,582
    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. ...