Уроки Iczelion'а



         

Урок 21. Пайп - часть 6


invoke MessageBox, hWnd, addr CreatepipeError, \ addr AppName, MB_ICONERROR+ MB_OK .else mov startupinfo.cb,sizeof STARTUpINFO

invoke GetStartupInfo,addr startupinfo mov eax, hWrite mov startupinfo.hStdOutput,eax mov startupinfo.hStdError,eax

mov startupinfo.dwFlags, STARTF_USESHOWWINDOW+\ STARTF_USESTDHANDLES mov startupinfo.wShowWindow,SW_HIDE invoke Createprocess, NULL, addr CommandLine, \ NULL, NULL, TRUE, NULL, NULL, NULL, addr startupinfo, \ addr pinfo .if eax==NULL invoke MessageBox,hWnd,addr CreateprocessError,\ addr AppName,MB_ICONERROR+MB_OK

.else invoke CloseHandle,hWrite .while TRUE invoke RtlZeroMemory,addr buffer,1024

invoke ReadFile,hRead,addr buffer,1023,addr bytesRead,NULL .if eax==NULL .break

.endif invoke SendMessage,hwndEdit,EM_SETSEL,-1,0 invoke SendMessage,hwndEdit,EM_REpLACESEL,\ FALSE,addr buffer .endw .endif invoke CloseHandle,hRead

.endif .endif .endif .elseif uMsg==WM_DESTROY

invoke postQuitMessage,NULL .else invoke DefWindowproc,hWnd,uMsg,wparam,lparam ret .endif

xor eax,eax ret Wndproc endp end start

Анализ:

Пример вызовет ml.exe, чтобы скомпилировать файл под названием test.asm, и перенаправит вывод в edit control. Когда программа загружена, она регистрирует класс окна и создает, как обычно, основное окно.

Теперь наступает самая интересная часть. Мы изменим цвет текста и бэкграунда edit control'а. Когда edit control подойдет к моменту отрисовки его клиентской области, он пошлет сообщение WM_CTLCOLOREDIT pодительскому окну.

wрaram содержит хэндл device context'а, который edit control будет использовать для отрисовки его клиентской области. Мы можем использовать эту возможность для изменения характеристик HDC.

.elseif uMsg==WM_CTLCOLOREDIT

invoke SetTextColor,wparam,Yellow invoke SetTextColor,wparam,Black invoke GetStockObject,BLACK_BRUSH ret

SetTextColor изменяет цвет текста на желтый. SetTextColor изменяет цвет фона текста на черный. И, наконец, мы получаем хэндл черной кисти, которую мы возвратим Windows. Обрабатывая сообщение WM_CTLCOLOREDIT, мы должны возвратить хэндл кисти, которую Windows использует для отрисовки бэкграунда edit control'а. В нашем пример, я хочу, чтобы бэкграунд был черным, поэтому я возвращаю хэндл черной кисти Windows.




Содержание  Назад  Вперед