· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.ASSEMBLER —› Проблема с диалоговым окном

Посл.отвђт Сообщенiе


Дата: Май 31, 2003 20:18:04

Создаю основное окно со стилем
ws equ WS_VISIBLE+WS_BORDER+WS_POPUP
invoke CreateWindowEx,WS_EX_TOPMOST,_class,ClassAsm,ws,350,2,280,20,NU LL,eax,[hinstance],NULL
потом вызываю диалог по выбору пункта меню
invoke DialogBoxParam,[hinstance],IDD_DLG1,[hwnd],Dialog_New_Project,0
диалог обьявляю так
dialog new_project,3,'Новый проект',6,6,169,205,WS_VISIBLE+WS_POPUP+WS_CHILD
dialogitem 'EDIT','',IDC_PATHPR,10,14,138,11,WS_VISIBLE
dialogitem 'BUTTON','...',IDC_PATHPRBTN,150,14,14,11,WS_VISIBLE+SS_CENTER+WS_TABS TOP
dialogitem 'STATIC','Путь к файлу проекта',IDC_STC1,12,3,132,9,WS_VISIBLE+SS_LEFT
При вызове диалога появляются только итемы диалогового окна, но само окно не видно, почему?


Дата: Май 31, 2003 20:29:46 · Поправил: Quantum

dialog new_project,3,'Новый проект',6,6,169,205,WS_VISIBLE+WS_POPUP+WS_CHILD
Зачем WS_CHILD???
Заменить на DS_CENTER + WS_POPUP + WS_CAPTION

invoke DialogBoxParam,[hinstance],IDD_DLG1,[hwnd],Dialog_New_Project,0
Dialog_New_Project -- это OFFSET процедуры обработки? Удостовертесь...

ЗЫ: Ещё стоит проверить саму функцию Dialog_New_Project


Дата: Июн 1, 2003 00:36:53

Я уже нашёл ошибку она была в процедуре.


Дата: Июн 3, 2003 17:23:07

pas
Кстати, известный глюк :)
В чём именно была ошибка?
Кроме всего я часто наблюдаю следующию картину, когда диалог не перемещается. (Правда такая ошибка возникает на Фортране...) И всё таки интересено почему (может кто-то сталкивался?)


Дата: Июн 3, 2003 20:42:55

Edmond
Извини не запомнил. В первый раз я копировал процедуру по частям и у меня не работало. потом скопировал процедуру разом, заработало так, что сорри.


Дата: Июн 4, 2003 03:37:48

Edmond
Кстати, известный глюк :)
Да, и у меня такое было...
Точно не помню, но вроде проблема была в значении возвращаемом по умолчанию в обработчик DialogBox. Всегда нужно возвращать ноль:
...
.ELSEIF msg == WM_INITDIALOG
...
mov eax,1
.ELSE
xor eax,eax ; <= здесь
.ENDIF
ret

Кстати, фон не вырисовывался только под 2000 и XP (в ME всё было OK).


Дата: Июн 6, 2003 17:59:51

Edmond
у меня получилось вернуть этот глюк.
так работает нормально.
proc Dialog_New_Project,hwnd,wmsg,wparam,lparam
enter
push ebx esi edi
cmp [wmsg],WM_LBUTTONDOWN
je .close
cmp [wmsg],WM_RBUTTONDOWN
je .close
xor eax,eax
jmp .finish
.close:
invoke EndDialog,[hwnd],0

.processed:
mov eax,1
.finish:

pop edi esi ebx
return
Если mov eax,1 опустить после метки .finish: фон пропадает. Т.е. Quantum прав, едиты и кнопки реагируют нормальн. У меня Win98 милениум ставил, но не понравился снёс его через 2 дня.
С уважением,pas.


Дата: Июн 7, 2003 11:32:44

Кстати mov eax,1 - не самый лучший вариант.
Правильнее будет написать
xor eax,eax
inc eax

это занимает немного меньше места (если я не ошибаюсь, то на 2 байта). Хотя смысл тот же, но оптимизация на лицо.


Дата: Июн 7, 2003 18:54:10

Если EndDialog возвращает TRUE, то зачем mov eax,1? Не логично...
pas, наверное, имел ввиду xor eax,eax перед jmp .finish


Дата: Июн 7, 2003 21:04:58

Quantum
Я говорю как получается. Именно mov eax,1.


Дата: Июн 9, 2003 19:20:58

Sk. Inc.
Гм.... А mov al,1 :)))


Дата: Июн 9, 2003 19:52:21

pas
Если убрать xor eax,eax, то фон пропадёт (проверил)
Зачем метка .processed, если на неё никто не ссылается?

Edmond
Или просто inc eax, ведь eax != -1


Дата: Июн 9, 2003 20:07:16

Quantum
Брал с готового файла просто, что бы изучить добавление в диалог чекбоксов и радиобаттонов
соответственно об оптимизации не заботился.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.080