Форум: "WinAPI";
Текущий архив: 2005.03.13;
Скачать: [xml.tar.bz2];
ВнизКак создать подкласс WC_LISTVIEW("SysListView32") ? Найти похожие ветки
← →
Atrion © (2005-01-28 01:30) [0]Уважаемые Мастера подскажите как создавать свои подклассы...
Я перелопатил ComCtrls и Controls, сделал идентично, но происходят глюки..Дайте кодик пожалуйсто....
← →
Cobalt © (2005-01-28 22:39) [1]А можно взглянуть на твой код?
Любопытно...
← →
Atrion © (2005-01-30 01:14) [2]Сразу предупреждаю я никаких АКАДЕМИЙ не заканчивал...
Если есть ошибки и причем грубые, то очень прошу подсказать как их исправить...
Желательно получить ответ на вопрос "Я хоть в ту сторону копаю?"
(В исходных до черта разных оконных стилей...я их убрал чтобы они общую картину не загараживали)procedure Create_SubClass(var WinClass:TWndClass;SubClass:string);
const CS_OFF = CS_OWNDC or CS_CLASSDC or CS_PARENTDC or CS_GLOBALCLASS;
CS_ON = CS_VREDRAW or CS_HREDRAW;
var ICC: TInitCommonControlsEx;
SaveInstance: THandle;
TempClass: TWndClass;
ClassRegistered: Boolean;
begin
ICC.dwSize := SizeOf(TInitCommonControlsEx);
ICC.dwICC :=ICC_LISTVIEW_CLASSES;
if not InitCommonControlsEx(ICC) then InitCommonControls;
FillChar(WinClass, SizeOf(TWndClass), 0);
with WinClass do
begin
Style := CS_VREDRAW + CS_HREDRAW + CS_DBLCLKS;
lpfnWndProc := @DefWindowProc;
hCursor := LoadCursor(0, IDC_ARROW);
hbrBackground := 0;
hInstance := HInstance;
lpszClassName:=PChar(SubClass); {этот кусок в Delphi от родителя-TWinControl,
как я понял он ничего не меняет}
if SubClass<>"" then
begin
SaveInstance := WinClass.hInstance;
if not GetClassInfo(HInstance,WC_LISTVIEW,WinClass) and
not GetClassInfo(0,WC_LISTVIEW, WinClass) and
not GetClassInfo(MainInstance,WC_LISTVIEW, WinClass) then
GetClassInfo(WinClass.hInstance,WC_LISTVIEW, WinClass);
hInstance := SaveInstance;
Style := WinClass.Style and not CS_OFF or CS_ON;
end;
Style := WinClass.style and not (CS_HREDRAW or CS_VREDRAW);
lpszClassName:=PСhar(SubClass);
ClassRegistered := GetClassInfo(WinClass.hInstance, WinClass.lpszClassName,TempClass);
if not ClassRegistered or (TempClass.lpfnWndProc <> @SubClassMainProc) then
begin
if ClassRegistered then Windows.UnregisterClass(PChar(SubClass),
WinClass.hInstance);
WinClass.lpfnWndProc := @SubClassMainProc; {SubClassMainProc(Handle:HWND;mes:UINT;wParamlParam:integer):longint;stdcall;}
WinClass.lpszClassName := PChar(SubClass);
if RegisterClass(WinClass)<>0 then
.........................................
end;
end;
end;
Потом создаю окно CreateWindowEx(.,WinClass.lpszClassName.....) и получаю шишь,а не SubClass
Хочется разобраться как разработчики из Borland осуществили надстройку над базисом (API).
← →
Cobalt © (2005-01-30 14:26) [3]Во-первых, давай разберёмся - для чего тебе "подкласс"?
← →
Atrion © (2005-01-31 01:40) [4]Зачем нужен подкласс?(Это практически ритарический вопрос...)…Когда я написал свой первый код только с API был ряд элементов от которых нужно было обрабатывать сообщение wm_notify.(в общем контролы подвисали-это я исправил потом)…спросил на форуме-не ответили…подумал что не плохо бы было как в VCL каждому элементу свою процедуру(да еще бы и свойства свои добавить) …начал смотреть выше упомянутые файлы и пошло поехало…куча вопросов-вот теперь пытаюсь прояснить их для себя…
Подкласс- это практически автономная единица, обладающая рядом свойств и методов, если не так то поправьте меня…
Calling SetWindowLong with the GWL_WNDPROC index creates a subclass of the window class used to create the window. An application should not subclass a window created by another process. The SetWindowLong function creates the window subclass by changing the window procedure associated with a particular window, causing Windows to call the new window procedure instead of the previous one. An application must pass any messages not processed by the new window procedure to the previous window procedure by calling CallWindowProc. This allows the application to create a chain of window procedures.
SetClassLong and SetWindowLong with GWL_WNDPROC--- это все понятно…только куда у меня раньше глаза смотрели?….
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.03.13;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.036 c