-
Преподаватель в институте сильно нахваливал MESSAGE_MAP в C++MFC, как сделать так же в Делфи7 на чистом API? Ну или просто как лучше поступать, мне кажется всё писать прям в самой оконной как-то плохо для самой программы, когда там совсем много. Хочется также учесть что некоторые сообщения приходят редко, а некоторые по много раз в секунду, а некоторые вообще не нужны (причём возможно не известно заранее какие как что).
-
> MESSAGE_MAP
я не знаю что это, но может через case удобнее?)
-
Что уж тогда, давайте If!
-
А это идея если кроме шуток.. Много вложенных If'ов.. Половинным делением.. Надо обдумать..
-
> Афонтий (12.04.13 15:35) > Преподаватель в институте сильно нахваливал MESSAGE_MAP > в C++MFC, как сделать так же в Делфи7 на чистом API?
MESSAGE_MAP - это карта обработчиков сообщений. В дельфи делается просто. > procedure MyMessage(var Message: TMessage); message WM_MYMESSAGE;
т.е. вместо раскидки обработчиков по карте присутствует явное назначение онного через message "константа сообщения" ; Во вторых, что MESSAGE_MAP, что MFC к "чистому АПИ", собственно как и "грязному" (будет такой есть в умах студентов и преподавателей) не относится вообще никак :)
-
Список адресов обработчиков с двоичным поиском по индексу. За нас уже давно всё сделано.
-
> В дельфи делается просто. > > procedure MyMessage(var Message: TMessage); message WM_MYMESSAGE; Отлично! Ну и куда мне это запихивать? =\\
program A;
uses Windows.h;
var Wc: TWndClassEx; Msg: TMsg;
function WindowProc(Wnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
case Msg of
WM_DESTROY:
begin
PostQuitMessage(0); Result:=0;
Exit;
end;
else
begin
Result:=DefWindowProc(Wnd, Msg, wParam, lParam);
end;
end;
end;
begin
Wc.cbSize:=SizeOf(Wc);
Wc.style:=CS_HREDRAW Or CS_VREDRAW;
Wc.lpfnWndProc:=@WindowProc;
Wc.cbClsExtra:=0;
Wc.cbWndExtra:=0;
Wc.hInstance:=hInstance;
Wc.hIcon:=LoadIcon(0, IDI_APPLICATION);
Wc.hCursor:=LoadCursor(0, IDC_ARROW);
Wc.hbrBackground:=COLOR_WINDOW;
Wc.lpszMenuName:=Nil;
Wc.lpszClassName:='A';
RegisterClassEx(Wc);
CreateWindowEx(0, 'A', 'TitleA', WS_VISIBLE Or WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 0, 0, hInstance, Nil);
while GetMessage(Msg, 0, 0, 0) do
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end.
-
Я не говорил что MESSAGE_MAP или MFC "относятся к АПИ", я сказал что в MFC есть понятие MESSAGE_MAP. BEGIN_MESSAGE_MAP(бла-бла..
> как и "грязному" (будет такой есть в умах студентов и преподавателей)
Чистый АПИ: * Подключать какие-либо модули кроме оригинальных заголовочников Windows - нельзя. * Объявлять классы - нельзя. * ..ну и по мелочи.. =)
> Список адресов обработчиков с двоичным поиском по индексу. > За нас уже давно всё сделано.
Это и интересует. Где возможно посмотреть реализацию?
|