Создаю в клиентской области окна listview с субклассированием.
Foo proc
local wc :WNDCLASSEX
invoke GetClassInfoEx, 0, addr ListViewClassName, addr wc
;mov esi, eax
mov wc.cbSize, sizeof(WNDCLASSEX)
m2m wc.hInstance, hInstance
mov wc.style, CS_DBLCLKS
mov wc.hbrBackground, COLOR_BACKGROUND + COLOR_WINDOW
m2m m_OldListViewProc, wc.lpfnWndProc
mov wc.lpfnWndProc, offset Client_WndProc
lea eax, ClientClass ; здесь новое имя класса
mov wc.lpszClassName, eax
invoke RegisterClassEx, ADDR wc
xor ebx, ebx
stc
rcr ebx, 1
invoke CreateWindowEx, WS_EX_CLIENTEDGE,\
eax,0, WS_CHILD + WS_VISIBLE + WS_CLIPSIBLINGS + WS_CLIPCHILDREN+9,\
ebx,ebx,ebx,ebx,m_hWnd,0,hInstance,0
test eax, eax
jz @@end
mov m_hWndClient, eax
@@end:
ret
Foo endp
Код был самым наглым образом позаимствован (с несущественными изменениями) из кода WTL приложения. После создания окна должно появиться собсно сам ListView32 (под другим именем) и SysHeader32. Только у меня SysHeader32 не хочет появляться. Таким же макаром ToolBar обрабатывал - все ОК (но там детей у него не было :)) Если я подставляю атом, полученный после GetClassInfoEx - все ОК, субклассировать правда потом SetWindowLong(Ptr) прийдется...
Просто интересно - где у меня грабли?