1 (изменено: yalanne, 2015-02-13 05:34:40)

Тема: AHK: CreateWindowEx стиль окна

Доброго времени суток.
Кто знает что это за стиль окна 0x50000000

столкнулся с с ним в этом скрипте:

;SetBatchLines -1
Gui +LastFound 
Gui Show,w800 h520

RText=Привет мир!
hRE:=DllCall("LoadLibrary",Str,"Msftedit.dll")
RE:=DllCall("CreateWindowEx"
    , Uint,    0x200
    , Str,     "RichEdit50W"
    , Str,     RText
    , Uint,    0x50000000
    , int,     0
    , int,     0
    , int,     200
    , int,    50 ;Pos
    , Uint,     WinExist()
    , Uint,    0
    , Uint,    hRE
    , Uint,    0) ;hWnd Parent, hInstance

Return

GuiClose:
GuiEscape:
ExitApp

если его не указывать, то edit поля не видно.
не совсем удобно со стилями edit'а работать.
и еще вопрос каким способом можно приделать контекстное меню на правую кнопку мыши для этого поля?

2

Re: AHK: CreateWindowEx стиль окна

; WS_CHILD (0x40000000) + WS_VISIBLE (0x10000000) = 0x50000000:

3

Re: AHK: CreateWindowEx стиль окна

Там не "+", там "|", это не одно и то же.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

4 (изменено: yalanne, 2015-02-13 06:16:24)

Re: AHK: CreateWindowEx стиль окна

спасибо. А что насчет второго вопроса?

5

Re: AHK: CreateWindowEx стиль окна

Нужно меню создать самостоятельно, после этого отслеживать клик правой кнопкой по данному контролу.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

6 (изменено: Malcev, 2015-02-13 06:39:18)

Re: AHK: CreateWindowEx стиль окна

0x50000000 получили, как я понимаю из-за того, что сложили эти 2 величины, поэтому так и написал.
Я не понимаю почему многие так все шифруют?
Нет, чтобы написать так:

;SetBatchLines -1
Gui +LastFound 
Gui Show,w800 h520

RText=Привет мир!
hRE:=DllCall("LoadLibrary",Str,"Msftedit.dll")
global WS_VISIBLE=0x10000000, WS_CHILD=0x40000000
RE:=DllCall("CreateWindowEx"
    , Uint,    0x200
    , Str,     "RichEdit50W"
    , Str,     RText
    , Uint,   WS_CHILD | WS_VISIBLE
    , int,     0
    , int,     0
    , int,     200
    , int,    50 ;Pos
    , Uint,     WinExist()
    , Uint,    0
    , Uint,    hRE
    , Uint,    0) ;hWnd Parent, hInstance

Return

GuiClose:
GuiEscape:
ExitApp

7

Re: AHK: CreateWindowEx стиль окна

Malcev пишет:

0x50000000 получили, как я понимаю из-за того, что сложили эти 2 величины

Так это не сложение, это операция "побитового или". Сравни два результата:

SetFormat, IntegerFast, H
MsgBox, % 0xFFFF | 0xFFFF "`n" 0xFFFF + 0xFFFF

Я не понимаю почему многие так все шифруют?

Я тоже не понимаю, может хотят казаться этакими волшебниками, оперирующими "магическими числами"?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

8 (изменено: yalanne, 2015-02-13 19:26:39)

Re: AHK: CreateWindowEx стиль окна

teadrinker пишет:

Нужно меню создать самостоятельно, после этого отслеживать клик правой кнопкой по данному контролу.

Я к такому решению пришел.

;SetBatchLines -1
Gui +LastFound 
Gui Show,w800 h520

Global WS_VISIBLE     := 0x10000000 
Global WS_CHILD      := 0x40000000 
Global ES_CENTER    := 0x1
Global ES_PASSWORD := 0x20


Global RE
RText=Привет мир!
hRE := DllCall("LoadLibrary",Str,"Msftedit.dll")
DllCall("CreateWindowEx"
    , Uint,    0x200
    , Str,     "RichEdit50W"
    , Str,     RText
    , Uint,    WS_VISIBLE | WS_CHILD | ES_CENTER
    , int,     0
    , int,     0
    , int,     200
    , int,    50 
    , Uint,     WinExist()
    , Uint,    0
    , Uint,    hRE
    , Uint,    0) 
    
OnMessage(0x0204, "WM_RBUTTONDOWN")
Return

WM_RBUTTONDOWN(){
MouseGetPos, , , , ctrl
if ctrl = RichEdit50W1
{
        Menu, menu_context, Add, Тык , a
        Menu, menu_context, Show
        Menu, menu_context, DeleteAll,
}
}


GuiClose:
GuiEscape:
ExitApp

a:
msgbox Тык

9

Re: AHK: CreateWindowEx стиль окна

Меню нужно создавать заранее и один раз. Правый клик можно отследить проще, через метку GuiContextMenu:

;SetBatchLines -1
Gui +LastFound 
Gui Show,w800 h520

Global WS_VISIBLE     := 0x10000000 
Global WS_CHILD      := 0x40000000 
Global ES_CENTER    := 0x1
Global ES_PASSWORD := 0x20

Menu, menu_context, Add, Тык , a

Global RE
RText=Привет мир!
DllCall("LoadLibrary",Str,"Msftedit.dll")
DllCall("CreateWindowEx"
    , Uint,    0x200
    , Str,     "RichEdit50W"
    , Str,     RText
    , Uint,    WS_VISIBLE | WS_CHILD | ES_CENTER
    , int,     0
    , int,     0
    , int,     200
    , int,    50 
    , Uint,     WinExist()
    , Uint,    0
    , Uint,    hRE
    , Uint,    0) 
Return

GuiContextMenu:
   MouseGetPos,,,, ctrl
   if ctrl = RichEdit50W1
      Menu, menu_context, Show
   Return

GuiClose:
GuiEscape:
ExitApp

a:
msgbox Тык
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder