Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];

Вниз

И снова Api. Суперклассинг.   Найти похожие ветки 

 
Nick Denry ©   (2004-02-23 00:27) [0]

Следующий вопрос, который мучает меня на протяжении тех почти 2-х месяцев, которых я не был в нете - это суперклассинг и диалоговые окна...

Суперклассинг провожу обчным методом :

Это истинный кусок кода  - MASM
.const
szStaticClass equ "STATIC", 0
szOurClass    equ "mysatticclass",0

.code
..........
SuperClassLabel proc
LOCAL lWndClEx : WNDCLASSEX
mov lWndClEx.cbSize,sizeof WNDCLASSEX
invoke GetClassInfoEx,NULL,addr szStaticClass,addr lWndClEx
push lWndClEx.lpfnWndproc
pop OldWndproc
mov lWndClEx.lpfnWndproc, OFFSET StaticWndproc
push hInstance
pop lWndClEx.hInstance
mov lWndClEx.lpszClassName,OFFSET szOurClass
invoke RegisterClassEx, addr lWndClEx
ret
SuperClassLabel endp

скажем так.

Перевожу на всякий случай:
procedure SuperClassLabel;
lWndClEx : TWNDCLASSEX;
var
begin
lWndClEx.cbSize := sizeof(WNDCLASSEX);
GetClassInfoEx(nil,PChar("STATIC"),@lWndClEx);
OldWndproc:=lWndClEx.lpfnWndproc;
lWndClEx.lpfnWndproc:=@StaticWndproc;
lWndClEx.hInstance := hInstance;
wc.lpszClassName := PCHar(szOurClass);
RegisterClassEx(@lWndClEx);
end;

Регистрация класса в общем проходит гладко, не смотря на возможные тут опеопечатки...

Соответственно в ресурсе у меня есть диалог со статико описаннного класса (выдержка из ресторатора):

ABOUT DIALOGEX 0, 0, 217, 110, 0
STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_NOFAILCREATE | WS_POPUPWINDOW | WS_VISIBLE | WS_DLGFRAME
EXSTYLE = WS_EX_DLGMODALFRAME | WS_EX_WINDOWEDGE
CAPTION "somecaption"
FONT 8, "MS Shell Dlg", 0, TRUE
{
CONTROL  "sometext1 : ", 6003,"mysatticclass",SS_NOTIFY,  4, 28, 123, 10
CONTROL  "sometex21 : ", 6004,"mysatticclass",SS_NOTIFY,  4, 48, 98, 10
LTEXT "ыщьуеуче3 : ", 6010, 4, 68, 39, 10
}

Регистрация класса производится до создания диалога.
И тут основная проблема: если диалог не имеет стиля DS_NOFAILCREATE , то он не создается \ отображается вообще , а если имеет, то не создаются данные контролы.

С процедурой  StaticWndproc все в порядке.

Могу так же заметить(тест в delphi, asm), что если  не использовать диалог, и создать клавное окно, произвести суперклассин по приведеннойй выше схеме (MSDN), а затем создать окно зарегистрированного класса - то оно создается!

Заранее спасибо.
С уважением, Nick Denry.

end;


 
Nick Denry ©   (2004-02-23 12:17) [1]

Удалено модератором
Примечание: Создание пустых сообщений.


 
Nick Denry ©   (2004-02-24 17:38) [2]

Без АСМа  -

;Суперклассирование

procedure SuperClassLabel;
lWndClEx : TWNDCLASSEX;
var
begin
 lWndClEx.cbSize := sizeof(WNDCLASSEX);
 GetClassInfoEx(nil,PChar("STATIC"),@lWndClEx);
 OldWndproc:=lWndClEx.lpfnWndproc;
 lWndClEx.lpfnWndproc:=@StaticWndproc;
  lWndClEx.hInstance := hInstance;
 wc.lpszClassName := PCHar(szOurClass);
  RegisterClassEx(@lWndClEx);
end;
Регистрация класса в общем проходит гладко, не смотря на возможные тут опеопечатки...

Соответственно в ресурсе у меня есть диалог со статико описаннного класса (выдержка из ресторатора):
;Диалог

ABOUT DIALOGEX 0, 0, 217, 110, 0
STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_CENTER | DS_NOFAILCREATE | WS_POPUPWINDOW | WS_VISIBLE | WS_DLGFRAME
EXSTYLE = WS_EX_DLGMODALFRAME | WS_EX_WINDOWEDGE
CAPTION "somecaption"
FONT 8, "MS Shell Dlg", 0, TRUE
{
CONTROL  "sometext1 : ", 6003,"mysatticclass",SS_NOTIFY,  4, 28, 123, 10
CONTROL  "sometex21 : ", 6004,"mysatticclass",SS_NOTIFY,  4, 48, 98, 10
LTEXT "ыщьуеуче3 : ", 6010, 4, 68, 39, 10
}

Регистрация класса производится до создания диалога.
И тут основная проблема: если диалог не имеет стиля DS_NOFAILCREATE , то он не создается \ отображается вообще , а если имеет, то не создаются данные контролы.

С процедурой  StaticWndproc все в порядке.

Могу так же заметить(тест в delphi, asm), что если  не использовать диалог, и создать клавное окно, произвести суперклассин по приведеннойй выше схеме (MSDN), а затем создать окно зарегистрированного класса - то оно создается!

Заранее спасибо.
С уважением, Nick Denry.

end;



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.039 c
3-1080797506
ГАГН
2004-04-01 09:31
2004.04.25
Дата


1-1081506710
Batoon
2004-04-09 14:31
2004.04.25
Помогите найти или сделать самму LISTBOX...


7-1077726910
Phantomaz
2004-02-25 19:35
2004.04.25
Почему SetWindowsHookEx не пашет, если активно Dos-окно ?


1-1081630447
Klopan
2004-04-11 00:54
2004.04.25
сохранение/загрузка ListView в/из файл.


8-1073893586
Lexer
2004-01-12 10:46
2004.04.25
Нужен DirectX для Delphi7





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский