Проблема с формой

Тема в разделе "WASM.WIN32", создана пользователем Attack, 7 окт 2009.

  1. Attack

    Attack New Member

    Публикаций:
    0
    Регистрация:
    25 сен 2009
    Сообщения:
    12
    Создаю форму:
    Код (Text):
    1. invoke CreateWindowEx,WS_EX_TOOLWINDOW or WS_EX_APPWINDOW or 0,ADDR ClassName,ADDR FormCaption,WS_SYSMENU or WS_CAPTION,362,194,431,81,0,0,hInst,0
    как видите это ToolWindow, и соответственно у него нету кнопок минимизации и максимизации. Однако если кликнуть ПКМ на заголовке то в открывшемся меню будут эти пункты:

    [​IMG]

    Вопрос: как можно отключить пункты "Развернуть" и "Свернуть"?
     
  2. maksim_

    maksim_ New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2009
    Сообщения:
    263
    а при чём тут x64? или это на х32 не повторяется?
     
  3. Attack

    Attack New Member

    Публикаций:
    0
    Регистрация:
    25 сен 2009
    Сообщения:
    12
    maksim_, извиняюсь, я просто спутал раздел...
     
  4. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    Attack,
    прежде чем постить в форум - ну, хоть по минимуму проверяйте, ага?
    - у WS_EX_TOOLWINDOW и WS_EX_APPWINDOW - противоположные задачи на таскбаре, зачем?
    - наверняка у вас не пустой FormCaption, а что на скриншоте, каким макаром?
    - что за чудовищный отступ у последней строчки сисменю, что вы над ней проделали?
    Короче, лечите свой недопоказанный код.
    Или уж выкладывайте сюда весь.

    И кстати, так что у вас: x64 или х32 ?
     
  5. Attack

    Attack New Member

    Публикаций:
    0
    Регистрация:
    25 сен 2009
    Сообщения:
    12
    kero, время было позднее, да и функций редактирования/удаления сообщений тут нету, что странно.
    - WS_EX_TOOLWINDOW использую для того, чтобы окно было с узким заголовком.
    - WS_EX_APPWINDOW использую, чтобы кнопка окна была на панели задач.
    - FormCaption был пустой(" ",0), теперь вписал банальность:
    [​IMG]

    Вот код:
    Код (Text):
    1.      .386
    2.      .model flat,stdcall
    3.      option casemap:none
    4.      include \masm32\include\windows.inc
    5.      include \masm32\include\user32.inc
    6.      include \masm32\include\kernel32.inc
    7.      include \masm32\include\gdi32.inc
    8.      include \masm32\include\comdlg32.inc
    9.      include \masm32\include\shell32.inc
    10.      includelib \masm32\lib\user32.lib
    11.      includelib \masm32\lib\kernel32.lib
    12.      includelib \masm32\lib\gdi32.lib
    13.      includelib \masm32\lib\comdlg32.lib
    14.      includelib \masm32\lib\shell32.lib
    15. WinMain proto :DWORD,:DWORD,:DWORD,:DWORD
    16. RGB macro red,green,blue
    17.      xor        eax,eax
    18.      mov        ah,blue
    19.      shl        eax,8
    20.      mov        ah,green
    21.      mov        al,red
    22. endm
    23. szText MACRO Name,Text:VARARG
    24.      LOCAL  lbl
    25.      jmp        lbl
    26.      Name   db Text,0
    27.      lbl:
    28. ENDM
    29. .const
    30. .data?
    31. hInstance       HINSTANCE ?
    32. CommandLine     LPSTR ?
    33. .data
    34. ;_______________
    35. ClassName       db "Class_name",0
    36. FormCaption     db "form caption",0
    37. ;_______________
    38. .code
    39. start:
    40.      invoke GetModuleHandle,NULL
    41.      mov        hInstance,eax
    42.      invoke GetCommandLine
    43.      invoke WinMain,hInstance,NULL,CommandLine,SW_SHOWDEFAULT
    44.      invoke ExitProcess,eax
    45. WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
    46. LOCAL wc    :WNDCLASSEX
    47. LOCAL msg   :MSG
    48. LOCAL hwnd  :HWND
    49.      mov        wc.cbSize,SIZEOF WNDCLASSEX
    50.      mov        wc.style,CS_BYTEALIGNCLIENT
    51.      mov        wc.lpfnWndProc,offset WndProc
    52.      mov        wc.cbClsExtra,NULL
    53.      mov        wc.cbWndExtra,NULL
    54.      push   hInst
    55.      pop        wc.hInstance
    56.      mov        wc.hbrBackground,COLOR_BTNFACE+1
    57.      mov        wc.lpszClassName,OFFSET ClassName
    58.      invoke LoadIcon,NULL,IDI_APPLICATION
    59.      mov        wc.hIcon,eax
    60.      mov        wc.hIconSm,eax
    61.      invoke LoadCursor,NULL,IDC_ARROW
    62.      mov        wc.hCursor,eax
    63.      invoke RegisterClassEx,addr wc
    64. invoke CreateWindowEx,WS_EX_TOOLWINDOW or WS_EX_APPWINDOW or 0,ADDR ClassName,ADDR FormCaption,WS_SYSMENU or WS_CAPTION,362,194,431,81,0,0,hInst,0
    65.      mov        hwnd,eax
    66.      INVOKE ShowWindow,hwnd,SW_SHOWNORMAL
    67.      INVOKE UpdateWindow,hwnd
    68.      .WHILE TRUE
    69.           invoke    GetMessage,ADDR msg,0,0,0
    70.           .BREAK .IF (!eax)
    71.           invoke    TranslateMessage,ADDR msg
    72.           invoke    DispatchMessage,ADDR msg
    73.      .ENDW
    74.       mov   eax,msg.wParam
    75.      ret
    76. WinMain endp
    77. WndProc proc hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
    78.      .IF uMsg == WM_DESTROY
    79.           invoke    PostQuitMessage,NULL
    80.      .ELSEIF uMsg == WM_CREATE
    81.      .ELSE
    82.           invoke    DefWindowProc,hWnd,uMsg,wParam,lParam
    83.           ret
    84.      .ENDIF
    85.      xor        eax,eax
    86.      ret
    87. WndProc endp
    88. end start
    Пишу на x32, а нормального MASM64 вроде нету, по крайней мере на официальном сайте. А на FASM переходить пока не охота.
     
  6. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    1) Прежде всего условимся, что "формы" остались в дельфи. В Win32 API - окна.

    2) Системное меню окна действительно не без сюрпризов. Дело в том, что состав системного меню и состав оконных стилей (WS_*, WS_EX_*) не слишком связаны, при этом функционал системного меню "главнее".

    Если в случае диалогового окна (Проект Комментария к Win32 API Tutorial by Iczelion (п.18)) круто бузит WS_SYSMENU,
    то в случае обычного окна нарушитель спокойствия - как раз WS_EX_TOOLWINDOW.
    Однако благая весть: нежелательные пункты меню можно как задизаблить, так и удалить.

    Код (Text):
    1. WndProc proc uses ebx hWnd:HWND, ...
    2. ...
    3.     .elseif uMsg==WM_CREATE
    4.     invoke GetSystemMenu,hWnd,FALSE
    5.     mov ebx,eax
    6. ; или так:
    7.     invoke EnableMenuItem,ebx,SC_MINIMIZE,MF_BYCOMMAND or MF_DISABLED or MF_GRAYED
    8.     invoke EnableMenuItem,ebx,SC_MAXIMIZE,MF_BYCOMMAND or MF_DISABLED or MF_GRAYED
    9.     invoke EnableMenuItem,ebx,SC_RESTORE,MF_BYCOMMAND or MF_DISABLED or MF_GRAYED
    10. ; или так:
    11. ;    invoke DeleteMenu,ebx,SC_MINIMIZE,MF_BYCOMMAND
    12. ;    invoke DeleteMenu,ebx,SC_MAXIMIZE,MF_BYCOMMAND
    13. ;    invoke DeleteMenu,ebx,SC_RESTORE,MF_BYCOMMAND
    14. ;    invoke DeleteMenu,ebx,SC_SIZE,MF_BYCOMMAND
    15. ;    invoke DeleteMenu,ebx,1,MF_BYPOSITION
    16.  
    17.       xor eax,eax
    18. ...
    Всего-то изучить справку MSDN по GetSystemMenu, EnableMenuItem, DeleteMenu, WM_SYSCOMMAND...
     
  7. Attack

    Attack New Member

    Публикаций:
    0
    Регистрация:
    25 сен 2009
    Сообщения:
    12
    kero, спасибо.
     
  8. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Attack В Вижуал студии(полной) имеется ml64.exe Наверняка, кто-то уже изготовил "боевой комплект", выдернув ассемблер оттуда. Более того, есть ml64 который можно запускать в win32 !
     
  9. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    valterg
    оно?
    http://narod.ru/disk/13994487000/x86_amd64.rar.html
    ~2.5 метра. от 2008 студии
     
  10. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Ну это добавка к масм - нет ни инклюдов(их нет и в Студии) и много из того, что есть в масм.
    В самой студии это папка в папке bin - в папке bin 32-битные компиляторы и в папке amd64 - "чисто" 64-битные.