CreateWindowEx

Тема в разделе "WASM.WIN32", создана пользователем hypers, 25 фев 2007.

  1. hypers

    hypers New Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2006
    Сообщения:
    34
    Подскажите, как поменять свойства окна после вызова CreateWindowEx.

    invoke CreateWindowEx, 40000h,\
    lpClassName,\
    lpWindowName,\
    WS_OVERLAPPEDWINDOW,\
    CW_USEDEFAULT,\
    CW_USEDEFAULT,\
    CW_USEDEFAULT,\
    CW_USEDEFAULT,\
    NULL,\
    NULL,\
    [wc.hInstance],\
    NULL

    Надо изменить WS_OVERLAPPEDWINDOW (4-ый параметр) на другой.
    Есть отдельная функция или ещё раз CreateWindowEx можно вызывать?
     
  2. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    GetWindowLong/SetWindowLong

    Вызов ещё раз CreateWindowEx создаст новое окно.
    MSDN рулит. Даже старые версии для Win95.
     
  3. OFFSIDE

    OFFSIDE New Member

    Публикаций:
    0
    Регистрация:
    23 сен 2006
    Сообщения:
    106
    invoke SetWindowLong,hWnd,GWL_EXSTYLE,WS_EX_TOOLWINDOW - exStyle
    invoke SetWindowLong,hWnd,GWL_STYLE,0 - все просто...
     
  4. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    не все стили можно ставить через эти функи. подробности можно прочитать в msdn в хелпе на функции CreateWindow и CreateWindowEx
     
  5. hypers

    hypers New Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2006
    Сообщения:
    34
    Не помогло!

    Код (Text):
    1. invoke  CreateWindowEx, NULL,\
    2.             lpClassName,\
    3.             lpWindowName,\
    4.             WS_VISIBLE+WS_POPUP,\
    5.             0,\
    6.             0,\
    7.             500,\
    8.             500,\
    9.             NULL,\
    10.             NULL,\
    11.             [wc.hInstance],\
    12.             NULL
    13.  
    14. mov [hwnd],     eax
    15.    
    16. invoke  SetWindowLong,  [hwnd],\
    17.             GWL_STYLE,\
    18.             WS_OVERLAPPEDWINDOW
    После этого кода окно должно быть в рамке?
    Посмотрите исходник если не лень.
     
  6. Asvald

    Asvald New Member

    Публикаций:
    0
    Регистрация:
    18 сен 2006
    Сообщения:
    58
    Попробуй после SetWindowLong вызвать SetWindowPos с флагом SWP_FRAMECHANGED, точно не помню, но некоторые изменения только после этого вступают в силу.
     
  7. Tiro

    Tiro New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2006
    Сообщения:
    49
    Адрес:
    Russia
    В общем виде:
    Код (Text):
    1. long_Style = GetWindowLong(hwnd, GWL_STYLE);
    2. SetWindowLong(hwnd, GWL_STYLE, long_Style & ~style_delete);
     
  8. OFFSIDE

    OFFSIDE New Member

    Публикаций:
    0
    Регистрация:
    23 сен 2006
    Сообщения:
    106
    Код (Text):
    1. invoke  CreateWindowEx, NULL,\
    2.             lpClassName,\
    3.             lpWindowName,\
    4.             WS_VISIBLE+WS_POPUP,\
    5.             0,\
    6.             0,\
    7.             500,\
    8.             500,\
    9.             NULL,\
    10.             NULL,\
    11.             [wc.hInstance],\
    12.             NULL
    13.  
    14. mov hwnd,eax
    15.    
    16. invoke  SetWindowLong,  hwnd,\
    17.             GWL_STYLE,\
    18.             WS_OVERLAPPEDWINDOW
    ???
     
  9. hypers

    hypers New Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2006
    Сообщения:
    34
    Знаю, что бред.
    Хотел сделать чтобы ALT+ENTER делало оконный режим...
     
  10. kero

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

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    Great
    >>GetWindowLong/SetWindowLong
    >не все стили можно ставить через эти функи. подробности можно прочитать в msdn в хелпе на функции CreateWindow и CreateWindowEx

    Поскольку в этих хелпах нет таких подробностей, - поясните, на что указует ваше нотабене. Неужели на стили CS_ ?
     
  11. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    Плохо смотрел...
     
  12. kero

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

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    >Плохо смотрел...

    Вы бы по-конкретнее, Соколиный глаз. Цитаточкой не огреете ?
     
  13. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    Чё-то и я не нахожу... Блин, ошибочка вышла, извиняюсь...
     
  14. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    kero > ... по-конкретнее ...
    RamMerLabs > ... не нахожу...
    Цитата из Window Styles: "... After the control has been created, these styles cannot be modified, except as noted ..."
    Много ли стилей содержат "To change this style after a window has been created, use SetWindowLong"?
     
  15. kero

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

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    q_q
    >Цитата из Window Styles:

    1) Повнимательнее, пожалуйста: приказано было "прочитать в msdn в хелпе на функции CreateWindow и CreateWindowEx".

    2) Не уверен, что правильно понял фразу "Много ли стилей содержат [...]", просьба расшифровать.
     
  16. kero

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

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    q_q

    Боюсь, фразу вашу понял все-таки правильно...

    Тогда на вопрос -
    >Много ли стилей содержат "To change this style after a window has been created, use SetWindowLong"?

    - отвечаю: мало, только WS_GROUP и WS_TABSTOP.

    А теперь укажите хотя бы один из оставшихся стилей, который SetWindowLong и в самом деле не могла бы переключить:

    WS_BORDER WS_CAPTION WS_CHILD WS_CLIPCHILDREN WS_CLIPSIBLINGS WS_DISABLED WS_DLGFRAME WS_HSCROLL WS_ICONIC WS_MAXIMIZE WS_MAXIMIZEBOX WS_MINIMIZE WS_MINIMIZEBOX WS_OVERLAPPED WS_OVERLAPPEDWINDOW WS_POPUP WS_POPUPWINDOW WS_THICKFRAME WS_SYSMENU WS_VISIBLE WS_VSCROLL.

    (За cmd.exe просьба не прятаться)
     
  17. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    kero
    1) Повнимательнее, пожалуйста: приказано было ...
    В указанных функциях в описании параметра style, содержится приведенная мною ссылка. Imho вполне логично более-менее объемную информацию оформлять отдельным разделом и при случае ссылаться на него.

    Боюсь, фразу вашу понял все-таки правильно...
    Не совсем. Это была не более чем ссылка на _официальную_ документацию.

    А теперь укажите
    Imho не тот случай, чтобы тратить свое время на проверку соответствия документации продукту. Если у тебя есть время, то пиши программу, проверяй ее на всевозможных soft- и hard-конфигурациях и помести сюда свое заключение.

    который SetWindowLong и в самом деле не могла бы переключить
    Тебе не приходит в голову, что изменение некоторых стилей могут/должны приводить не только к визуальным изменениям?
    Зачем для изменения некоторых стилей специально придуманы функции? Например, для WS_DISABLED и WS_VISIBLE, о чем указано в _официальной_ документации.
    Afaik использование этой функции, с параметром GWL_STYLE, вообще не приводит к визуальным эффектам, необходимы дополнительные усилия.

    (За cmd.exe просьба не прятаться)
    Не понял. А это тут причем?
     
  18. kero

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

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    q_q

    >>1) Повнимательнее, пожалуйста: приказано было ...
    >В указанных функциях в описании параметра style, содержится приведенная мною ссылка.
    >Imho вполне логично более-менее объемную информацию оформлять отдельным разделом и при случае ссылаться на него.

    А, так вот что такое подробности: это ссылка на ссылку... Неблагозвучно, не находите ?

    >>Боюсь, фразу вашу понял все-таки правильно...
    >Не совсем. Это была не более чем ссылка на _официальную_ документацию.

    Не скромничайте: "Много ли стилей содержат (итд)" - это прямо в тутор по риторике.

    >>А теперь укажите
    >Imho не тот случай, чтобы тратить свое время на проверку соответствия документации продукту.
    >Если у тебя есть время, то пиши программу, проверяй ее на всевозможных soft- и hard-конфигурациях и помести сюда свое заключение.

    Ой. А давайте лучше вернемся к нашим баранам.
    Был задан вопрос: как поменять WS_OVERLAPPEDWINDOW у окна, созданного с этим стилем.
    WS_OVERLAPPEDWINDOW - как раз из тех стилей, которые "не содержат" (см. выше).
    Я правильно понимаю, что ваш ответ - НИКАК ?
    А то ведь иначе вся ваша риторика - коту под хвост.
    Просьба ответить ответом, а не вопросом.

    >>который SetWindowLong и в самом деле не могла бы переключить
    >Тебе не приходит в голову, что изменение некоторых стилей могут/должны приводить не только к визуальным изменениям?

    Ой, правда ??

    >Зачем для изменения некоторых стилей специально придуманы функции? Например, для WS_DISABLED и WS_VISIBLE, о чем указано в _официальной_ документации.
    >Afaik использование этой функции, с параметром GWL_STYLE, вообще не приводит к визуальным эффектам, необходимы дополнительные усилия.

    Ну что вы ломитесь в открытую дверь ? Али в Remarks к SetWindowLong об SetWindowPos не поведано ?

    >>(За cmd.exe просьба не прятаться)
    >Не понял. А это тут причем?

    А, так ваше Imho еще не мучило окно консоли...
     
  19. DelExe

    DelExe New Member

    Публикаций:
    0
    Регистрация:
    22 авг 2005
    Сообщения:
    165
    Попробуйте перед изменением стиля скрыть окно, а после изменения показать (ShowWindow).
     
  20. OFFSIDE

    OFFSIDE New Member

    Публикаций:
    0
    Регистрация:
    23 сен 2006
    Сообщения:
    106
    А лучше все таки использовать MoveWindow. Дело в том, что окно не содержащее заголовка с координатами 0,0 (X,Y) находится в верхнем левом углу монитора, а содержащее заголовок чуть ниже(клиентская область). Переписав исходник на masm результата добился только используя MoveWindow :)