DialogBoxParam size

Тема в разделе "WASM.BEGINNERS", создана пользователем calidus, 13 май 2008.

  1. calidus

    calidus Member

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    618
    Мне нужно чтобы диологовое окно с функции DialogBoxParam было во весь экран =) , какое событие использовать или какие есть варианты =)
     
  2. Com[e]r

    Com[e]r Com[e]r

    Публикаций:
    0
    Регистрация:
    20 апр 2007
    Сообщения:
    2.624
    Адрес:
    ого..
    http://nehe.gamedev.net/default.asp
    Lessons, там сорец из средних качай под твою систему, твой компилятор,
    там отдельной функцией создание окна на весь экран.
    против прозрачных окошек юзай TOPMOST.
     
  3. DEEP

    DEEP Андрей

    Публикаций:
    0
    Регистрация:
    27 апр 2008
    Сообщения:
    491
    Адрес:
    г. Владимир
    Нужно, имхо, в ресурсе, откуда делается загрузка, заранее проставить флаг WS_MAXIMIZE. Если не помогает (хз пчм так, но у меня ресурс-вьювер этот флаг игнорирует, а прогу для проверки на ночь глядя писать лень) - тогда нужно в обработчике WM_INITDIALOG послать самому себе WM_SYSCOMMAND с флагом SC_MAXIMIZE.
     
  4. calidus

    calidus Member

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    618
    =) Спасибо , попробую отпишусь !
     
  5. calidus

    calidus Member

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    618
    Код (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

    Публикаций:
    0
    Регистрация:
    21 май 2004
    Сообщения:
    507
    Адрес:
    Russia
    calidus
    "#include <windows.h>" в файле ресурсов пробовал сделать?
     
  7. calidus

    calidus Member

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    618
    Код (Text):
    1.     @@init:
    2. invoke SendMessage,[a_hdlg],WM_SYSCOMMAND,SC_MAXIMIZE,0
    Код (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

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    618
    Да я уже разобрался ))) спасибо !!! но растягивание на весь экран видимый не работает =(
     
  9. Com[e]r

    Com[e]r Com[e]r

    Публикаций:
    0
    Регистрация:
    20 апр 2007
    Сообщения:
    2.624
    Адрес:
    ого..
    calidus
    сказано тебе - аналогично с переходом в fullscreen, а ты "ножной мяч", "ножной мяч"..
     
  10. diamond

    diamond New Member

    Публикаций:
    0
    Регистрация:
    21 май 2004
    Сообщения:
    507
    Адрес:
    Russia
    calidus
    Чтобы окно можно было максимизировать через WM_SYSCOMMAND, у него должен быть установлен стиль WS_MAXIMIZEBOX. (Хотя, может быть, и WS_MAXIMIZE.)
     
  11. DEEP

    DEEP Андрей

    Публикаций:
    0
    Регистрация:
    27 апр 2008
    Сообщения:
    491
    Адрес:
    г. Владимир
    Затык, видимо, вот здесь:
    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

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    ShowWindow (hWnd, SW_SHOWMAXIMIZED) в WM_INITDIALOG.
    никаких стилей не надо.
    не трахаем друг другу мозги))
     
  13. calidus

    calidus Member

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    618
    Ага Спасибо ! Все заработало ))))))

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

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

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

    calidus Member

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

    diamond New Member

    Публикаций:
    0
    Регистрация:
    21 май 2004
    Сообщения:
    507
    Адрес:
    Russia
    MoveWindow(GetDlgItem(hDlg, id), ...) Правильные координаты придётся рассчитывать вручную.
     
  16. calidus

    calidus Member

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    618
    Вот как ... а если их много ? .. 1 листбокс или едит бокс еще ладно а все , сохранится при этом компоновка. Хотя поидее должна.
     
  17. wasm_test

    wasm_test wasm test user

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

    Com[e]r Com[e]r

    Публикаций:
    0
    Регистрация:
    20 апр 2007
    Сообщения:
    2.624
    Адрес:
    ого..
    calidus
    о, нифига, я знаменит!..

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

    calidus Member

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    618
    =) не мог бы ты показать
     
  20. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Код (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. }
    можно "цеплять" контрол к центру окна, к границам и т.п. с определенным отступом
    например юзать так:

    Код (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. ...