Мне нужно чтобы диологовое окно с функции DialogBoxParam было во весь экран =) , какое событие использовать или какие есть варианты =)
http://nehe.gamedev.net/default.asp Lessons, там сорец из средних качай под твою систему, твой компилятор, там отдельной функцией создание окна на весь экран. против прозрачных окошек юзай TOPMOST.
Нужно, имхо, в ресурсе, откуда делается загрузка, заранее проставить флаг WS_MAXIMIZE. Если не помогает (хз пчм так, но у меня ресурс-вьювер этот флаг игнорирует, а прогу для проверки на ночь глядя писать лень) - тогда нужно в обработчике WM_INITDIALOG послать самому себе WM_SYSCOMMAND с флагом SC_MAXIMIZE.
Код (Text): #define IDD_DLG1 1000 #define IDC_LST1 1001 #define IDC_EDT1 1002 #define IDC_BTN1 1003 IDD_DLG1 DIALOGEX 6,5,298,135 FONT 8,"MS Sans Serif",0,0,0 STYLE WS_POPUP|WS_VISIBLE|DS_CENTER|DS_SETFOREGROUND|DS_SETFONT EXSTYLE WS_EX_TOPMOST BEGIN 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 CONTROL "",IDC_EDT1,"Edit",WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_MULTILINE,0,108,244,26,WS_EX_CLIENTEDGE CONTROL "Send",IDC_BTN1,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,244,108,54,26 END Почему компилер Рс из пакета масм9 не понимает это STYLE WS_POPUP|WS_VISIBLE|DS_CENTER|DS_SETFOREGROUND|DS_SETFONT а это понимает STYLE 0x91000A40 EXSTYLE 0x00000008 Хотя первый вариант с новой программы а второй со старой ?!
Код (Text): @@init: invoke SendMessage,[a_hdlg],WM_SYSCOMMAND,SC_MAXIMIZE,0 Код (Text): mov eax,[a_msg] cmp eax,WM_CLOSE jz @@close cmp eax,WM_INITDIALOG jz @@init cmp eax,WM_COMMAND jz @@command cmp eax,WM_KEYUP jz @@key_up cmp eax,WM_CTLCOLORDLG jz @@setcol не работает =(
calidus Чтобы окно можно было максимизировать через WM_SYSCOMMAND, у него должен быть установлен стиль WS_MAXIMIZEBOX. (Хотя, может быть, и WS_MAXIMIZE.)
Затык, видимо, вот здесь: STYLE WS_POPUP|WS_VISIBLE|DS_CENTER|DS_SETFOREGROUND|DS_SETFONT меняем на STYLE WS_MAXIMIZE|WS_POPUP|WS_VISIBLE|DS_CENTER|DS_SETFOREGROUND|DS_SETFONT теоретически должно сработать...
ShowWindow (hWnd, SW_SHOWMAXIMIZED) в WM_INITDIALOG. никаких стилей не надо. не трахаем друг другу мозги))
Ага Спасибо ! Все заработало )))))) Да я просто поменял менеджер ресурсов и он немного другой стал =) но потом максимизед я добавил. Эммм да , там в свойствах 2 сразу есть , 3 комбинации всего. Все попробовал не пашет. но уже подругому сделано Comer_ ой комер ! я тя знаю , ты как ченить скажешь =)))) лень мне те коды смотреть , знаю что есть проще ! ( и не спорь ! а то будет как джепегом )
=) проблема теперь другая , едит бокс и другие компоненты не посередине. Как их на середину устанвить в большом окне. В свойствах ресурсов вроде нет центрирования
Вот как ... а если их много ? .. 1 листбокс или едит бокс еще ладно а все , сохранится при этом компоновка. Хотя поидее должна.
я писал парочку функций чтобы правильно размещались контролы в диалоге независимо от его размера. а сам диалог делал sizeable. получается весьма симпотишно
calidus о, нифига, я знаменит!.. ну я то думал ты фуллскрин хочешь, в противном случае ты б уже давно F1 нажал и в win32sdk.hlp сам всё изучил.
Код (Text): enum _ITEMPOSITION { IP_CENTERED, IP_BORDERFIXED, IP_RBORDERFIXED, IP_TOBORDER, IP_FIXED }; void SetItemPosition(HWND hWnd, UINT Item, _ITEMPOSITION LeftPos, UINT LeftValue, _ITEMPOSITION TopPos, UINT TopValue, _ITEMPOSITION WidthPos, UINT Width, _ITEMPOSITION HeightPos, UINT Height, BOOLEAN IncludeParagraph) { UINT x=0, y=0, sx=Width, sy=Height; RECT rt; GetClientRect(hWnd, &rt); switch(LeftPos) { case IP_CENTERED: x = (rt.right-Width)/2; break; case IP_BORDERFIXED: x = rt.right - LeftValue; break; case IP_RBORDERFIXED: x = rt.right - Width - LeftValue; break; case IP_FIXED: x = LeftValue; break; } switch(TopPos) { case IP_CENTERED: y = (rt.bottom-Height)/2; break; case IP_BORDERFIXED: y = rt.bottom - TopValue; break; case IP_RBORDERFIXED: y = rt.bottom - Height - TopValue; break; case IP_FIXED: y = TopValue; break; } switch(WidthPos) { case IP_TOBORDER: sx = WindowWidth(hWnd) - x - (IncludeParagraph?12:0) + Width; break; } switch(HeightPos) { case IP_TOBORDER: sy = WindowHeight(hWnd) - y - (IncludeParagraph?12:0) + Height; break; } if( IncludeParagraph ) { x += 12; y += 12; sx -= 12; sy -= 12; } MoveWindow(GetDlgItem(hWnd,Item), x, y, sx, sy, TRUE); } можно "цеплять" контрол к центру окна, к границам и т.п. с определенным отступом например юзать так: Код (Text): case WM_SIZE: SetItemPosition(hWnd, IDCANCEL, IP_CENTERED, 0, IP_RBORDERFIXED, 20, IP_FIXED, 77, IP_FIXED, 23, FALSE); SetItemPosition(hWnd, IDC_REDBUTTON, IP_RBORDERFIXED, 12, IP_RBORDERFIXED, 12, IP_FIXED, 350, IP_FIXED, 30, FALSE); SetItemPosition(hWnd, IDC_SERVERS, IP_FIXED, 0, IP_FIXED, 0, IP_FIXED, 110, IP_TOBORDER, 0, TRUE ); SetItemPosition(hWnd, IDC_STATIC_SERVERGROUP, IP_FIXED, 112, IP_FIXED, 0, IP_TOBORDER, 2, IP_TOBORDER, 2, TRUE ); ...