Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание окна своей формой 
:(
    Опции темы
gwest
Дата 9.9.2006, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 8.11.2005

Репутация: нет
Всего: нет



Вобщем нужно создать окно элиптической формы (CreateEllipticRgn).
подскажите на каком этапе использовать ету функцию...
и какой класс окна нужно регистрировать...

пробовал использовать ее во время реакции на сообщение paint, только окно так и не перерисовалось smile 
PM MAIL   Вверх
Damarus
Дата 9.9.2006, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 671
Регистрация: 6.5.2006

Репутация: нет
Всего: 29



Например в WM_CREATE.
PM MAIL ICQ Jabber   Вверх
gwest
Дата 9.9.2006, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 8.11.2005

Репутация: нет
Всего: нет



а какой класс окна(главное) регистрировать если оно потом всеравно заменится....
или главное окно будет отдельно просто его не отоброжать?
 smile 
PM MAIL   Вверх
Damarus
Дата 9.9.2006, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 671
Регистрация: 6.5.2006

Репутация: нет
Всего: 29



Без разницы. Просто устанавливай новый регион окна в WM_CREATE.
PM MAIL ICQ Jabber   Вверх
gwest
Дата 12.9.2006, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 8.11.2005

Репутация: нет
Всего: нет



Вобщем написал я тут кое что... всеравно не работает....

include.inc - тут константы, структуры и т.п
Код

;сообщения
WM_CREATE equ 1h
WM_PAINT equ 0Fh
WM_TIMER equ 113h
WM_DESTROY equ 2h

;константы стилей окна и других элементов
CS_GLOBALCLASS equ 4000h
CS_HREDRAW equ 2h
CS_VREDRAW equ 1h
WS_OVERLAPPED equ 0h
WS_THICKFRAME equ 40000h
WS_SYSMENU equ 80000h
COLOR_WINDOW equ 5
SW_HIDE equ 0
SW_SHOWNORMAL equ 1


;стили окна и других элементов
STYLE equ CS_VREDRAW + CS_HREDRAW + CS_GLOBALCLASS
WS_OVERLAPPEDWINDOW equ WS_OVERLAPPED + WS_THICKFRAME + WS_SYSMENU


;константы курсора и иконки
IDC_ARROW equ 32512
IDI_WINLOGO equ 32517


;функции
extern GetModuleHandleA@4:near
extern LoadIconA@8:near
extern LoadCursorA@8:near
extern RegisterClassA@4:near
extern CreateWindowExA@48:near
extern ExitProcess@4:near
extern ShowWindow@8:near
extern UpdateWindow@4:near
extern TranslateMessage@4:near
extern DispatchMessageA@4:near
extern PostQuitMessage@4:near
extern DefWindowProcA@16:near
extern GetMessageA@16:near
extern CreateRoundRectRgn@24:near


;структуры
MSGSTRUCT STRUC
  MSHWND DD ?
  MSMESSAGE DD ?
  MSWPARAM DD ?
  MSLPARAM DD ?
  MSTIME DD ?
  MSPT DD ?
MSGSTRUCT ENDS

WNDCLASS STRUC
  CLSSTYLE DD ?
  CLWNDPROC DD ?
  CLSCEXTRA DD ?
  CLWNDEXTRA DD ?
  CLSHINSTANCE DD ?
  CLSHICON DD ?
  CLSHCURSOR DD ?
  CLBKGROUND DD ?
  CLMENUNAME DD ?
  CLNAME DD ?
WNDCLASS ENDS


code.asm - непосредственно сам код
Код

.586
.MODEL FLAT, stdcall

include include.inc
includelib D:\assembler\masm32\lib\user32.lib
includelib D:\assembler\masm32\lib\kernel32.lib
includelib D:\assembler\masm32\lib\gdi32.lib


_data segment
  hinst dd 0
  newhwnd dd 0
  hwnd dd 0
  titlename db 'заголовок',0
  classname db 'class32',0 
  msg MSGSTRUCT <?>
  wc WNDCLASS <?>
_data ends

_code segment
start:
  push 0
  call GetModuleHandleA@4
  mov [hinst],eax
  
  mov [wc.CLSSTYLE],STYLE
  mov [wc.CLWNDPROC],offset WNDPROC
  mov [wc.CLSCEXTRA],0
  mov [wc.CLWNDEXTRA],0
  mov eax,[hinst]
  mov [wc.CLSHINSTANCE],eax
  push IDI_WINLOGO
  push 0
  call LoadIconA@8
  mov [wc.CLSHICON],eax
  push IDC_ARROW
  push 0
  call LoadCursorA@8
  mov [wc.CLSHCURSOR],eax
  mov [wc.CLBKGROUND],COLOR_WINDOW
  mov [wc.CLMENUNAME],0
  mov [wc.CLNAME],offset classname
  
  push offset wc
  call RegisterClassA@4
  
  push 0
  push [hinst]
  push 0
  push 0
  push 400
  push 400
  push 100
  push 100
  push WS_OVERLAPPEDWINDOW
  push offset titlename
  push offset classname
  push 0
  call CreateWindowExA@48
  
  cmp eax,0
  jz _err
  mov [newhwnd],eax
  
  push SW_SHOWNORMAL
  push [newhwnd]
  call ShowWindow@8
  
  push [newhwnd]
  call UpdateWindow@4

msg_loop:

  push 0
  push 0
  push 0
  push offset msg
  call GetMessageA@16
  cmp eax,0
  jz _err
  push offset msg
  call TranslateMessage@4
  push offset msg
  call DispatchMessageA@4
  jmp msg_loop

end_loop:
  push [msg.MSWPARAM]
  call ExitProcess@4
_err:
  jmp end_loop

;[ebp+014h]-lpar
;[ebp+10h]-wpar
;[ebp+0ch]-mes
;[ebp+8h]-hwnd
WNDPROC proc
  push ebp
  mov ebp,esp
  push ebx
  push esi
  push edi
  cmp dword ptr [ebp+0ch],WM_DESTROY
  je wmdestroy
  cmp dword ptr [ebp+0ch],WM_CREATE
  je wmcreate
  jmp defwndproc
wmcreate:
  push 15
  push 15
  push 100
  push 100
  push 10
  push 10
  call CreateRoundRectRgn@24
  mov [hwnd],eax
  push SW_SHOWNORMAL
  push [hwnd]
  call ShowWindow@8
  mov eax,0
  jmp finish
defwndproc:
  push dword ptr [ebp+014h]
  push dword ptr [ebp+10h]
  push dword ptr [ebp+0ch]
  push dword ptr [ebp+8h]
  call DefWindowProcA@16
  jmp finish
wmdestroy:
  push 0
  call PostQuitMessage@4
  mov eax,0
finish:
  pop edi
  pop esi
  pop ebx
  pop ebp
  ret 16
WNDPROC endp 
_code ends 
end start


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


Это сообщение отредактировал(а) gwest - 12.9.2006, 17:29
PM MAIL   Вверх
Damarus
Дата 13.9.2006, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 671
Регистрация: 6.5.2006

Репутация: нет
Всего: 29



Так примерно:

include.inc
Код

;сообщения
WM_CREATE equ 1h
WM_PAINT equ 0Fh
WM_TIMER equ 113h
WM_DESTROY equ 2h

;константы стилей окна и других элементов
CS_GLOBALCLASS equ 4000h
CS_HREDRAW equ 2h
CS_VREDRAW equ 1h
WS_OVERLAPPED equ 0h
WS_THICKFRAME equ 40000h
WS_SYSMENU equ 80000h
WS_POPUP equ 80000000h           ; Стиль без рамки, т.к. она не нужна
COLOR_WINDOW equ 5
SW_HIDE equ 0
SW_SHOWNORMAL equ 1


;стили окна и других элементов
STYLE equ CS_VREDRAW + CS_HREDRAW + CS_GLOBALCLASS
WS_OVERLAPPEDWINDOW equ WS_OVERLAPPED + WS_THICKFRAME + WS_SYSMENU


;константы курсора и иконки
IDC_ARROW equ 32512
IDI_WINLOGO equ 32517


;функции
extern GetModuleHandleA@4:near
extern LoadIconA@8:near
extern LoadCursorA@8:near
extern RegisterClassA@4:near
extern CreateWindowExA@48:near
extern ExitProcess@4:near
extern ShowWindow@8:near
extern UpdateWindow@4:near
extern TranslateMessage@4:near
extern DispatchMessageA@4:near
extern PostQuitMessage@4:near
extern DefWindowProcA@16:near
extern GetMessageA@16:near
extern CreateRoundRectRgn@24:near
extern SetWindowRgn@12:near           ; Функция установки региона


;структуры
MSGSTRUCT STRUC
  MSHWND DD ?
  MSMESSAGE DD ?
  MSWPARAM DD ?
  MSLPARAM DD ?
  MSTIME DD ?
  MSPT DD ?
MSGSTRUCT ENDS

WNDCLASS STRUC
  CLSSTYLE DD ?
  CLWNDPROC DD ?
  CLSCEXTRA DD ?
  CLWNDEXTRA DD ?
  CLSHINSTANCE DD ?
  CLSHICON DD ?
  CLSHCURSOR DD ?
  CLBKGROUND DD ?
  CLMENUNAME DD ?
  CLNAME DD ?
WNDCLASS ENDS


code.asm
Код

.586
.MODEL FLAT, stdcall

include include.inc
includelib user32.lib
includelib kernel32.lib
includelib gdi32.lib


_data segment
  hinst dd 0
  newhwnd dd 0
  hwnd dd 0
  titlename db 'заголовок',0
  classname db 'class32',0 
  msg MSGSTRUCT <?>
  wc WNDCLASS <?>
_data ends

_code segment
start:
  push 0
  call GetModuleHandleA@4
  mov [hinst],eax
  
  mov [wc.CLSSTYLE],STYLE
  mov [wc.CLWNDPROC],offset WNDPROC
  mov [wc.CLSCEXTRA],0
  mov [wc.CLWNDEXTRA],0
  mov eax,[hinst]
  mov [wc.CLSHINSTANCE],eax
  push IDI_WINLOGO
  push 0
  call LoadIconA@8
  mov [wc.CLSHICON],eax
  push IDC_ARROW
  push 0
  call LoadCursorA@8
  mov [wc.CLSHCURSOR],eax
  mov [wc.CLBKGROUND],COLOR_WINDOW
  mov [wc.CLMENUNAME],0
  mov [wc.CLNAME],offset classname
  
  push offset wc
  call RegisterClassA@4
  
  push 0
  push [hinst]
  push 0
  push 0
  push 400
  push 400
  push 100
  push 100
  push WS_POPUP
  push offset titlename
  push offset classname
  push 0
  call CreateWindowExA@48
  
  cmp eax,0
  jz _err
  mov [newhwnd],eax
  
  push SW_SHOWNORMAL
  push [newhwnd]
  call ShowWindow@8
  
  push [newhwnd]
  call UpdateWindow@4

msg_loop:

  push 0
  push 0
  push 0
  push offset msg
  call GetMessageA@16
  cmp eax,0
  jz _err
  push offset msg
  call TranslateMessage@4
  push offset msg
  call DispatchMessageA@4
  jmp msg_loop

end_loop:
  push [msg.MSWPARAM]
  call ExitProcess@4
_err:
  jmp end_loop

;[ebp+014h]-lpar
;[ebp+10h]-wpar
;[ebp+0ch]-mes
;[ebp+8h]-hwnd
WNDPROC proc
  push ebp
  mov ebp,esp
  push ebx
  push esi
  push edi
  cmp dword ptr [ebp+0ch],WM_DESTROY
  je wmdestroy
  cmp dword ptr [ebp+0ch],WM_CREATE
  je wmcreate
  jmp defwndproc
wmcreate:
  push 15
  push 15
  push 100
  push 100
  push 10
  push 10
  call CreateRoundRectRgn@24
  push 0                       ; FALSE
  push eax                     ; Handle региона
  push dword ptr [ebp+08h]     ; Handle окна
  call SetWindowRgn@12         ; Устанавливаем регион
  mov eax,0
  jmp finish
defwndproc:
  push dword ptr [ebp+014h]
  push dword ptr [ebp+10h]
  push dword ptr [ebp+0ch]
  push dword ptr [ebp+8h]
  call DefWindowProcA@16
  jmp finish
wmdestroy:
  push 0
  call PostQuitMessage@4
  mov eax,0
finish:
  pop edi
  pop esi
  pop ebx
  pop ebp
  ret 16
WNDPROC endp 
_code ends 
end start


Это сообщение отредактировал(а) Damarus - 13.9.2006, 09:06
PM MAIL ICQ Jabber   Вверх
gwest
Дата 13.9.2006, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 8.11.2005

Репутация: нет
Всего: нет



2 Damarus
отдельное тебе пасибо наконец то разобрался...
если не сложно подскажи где можно найти литературу или справочник функции по регионам (желательно русско язычные), а то в моих большинство функции отсутствует... а об этой SetWindowRgn, я узнал уже от тебя... поэтому и пытался отобразить при помощи ShowWindow...
PM MAIL   Вверх
Damarus
Дата 13.9.2006, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 671
Регистрация: 6.5.2006

Репутация: нет
Всего: 29



На русском не знаю. А так - MSDN:
Painting and Drawing Functions
Region Functions
PM MAIL ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для Windows/DOS"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для Windows/Dos | Следующая тема »


 




[ Время генерации скрипта: 0.0513 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.