![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Изменения обработчика сообщений у контрола. [D6, Win2k]
User © (2003-05-25 19:00:00)Мастера хочется узнать правильно ли написан обработчик ?
var
...
OldRichEditProc : Pointer;
...
Function NewRichEditProc(hWindow: THandle; uMsg, wParam, lParam: Integer): Integer; Stdcall;
Begin
If uMsg = WM_PAINT Then
Begin
// Тут я пишу свой код
End
Else
Result := CallWindowProc(OldRichEditProc, hWindow, uMsg, wParam, lParam);
End;
в главном обработчике окна :
Function MainWindowProc(hWindow: THandle; uMsg, wParam, lParam: Integer): Integer; Stdcall; Export;
Var
I : Integer;
...
Case uMsg Of
...
WM_SHOWWINDOW:
Begin
I := GetDlgItem(hWindow, IDC_RICHEDIT); // Код RichEdit контрола
OldRichEditProc := Pointer(GetWindowLong(I, GWL_WNDPROC));
SetWindowLong(I, GWL_WNDPROC, LongInt(@NewRichEditProc));
Result := 0;
End;
...
Работает нормально, но смущает то, что код инициализации приходится писать в WM_SHOWWINDOW т.к. в WM_CREATE еще не удается получить HWND у IDC_RICHEDIT (Контрол не создается, а берется из ресурсного файла).
Nick Denry (2003-05-25 19:16:00) [1]Если окно создавать не на wm_create, а после бегина, то ричьедит можно создавать после создания окна. Там HWND и получишь!
User (2003-05-25 19:06:00) [2]2 Nik Denry.
Да это оно и есть :)
Nick Denry (2003-05-25 19:03:00) [3]сабклассинг.......................