Интеграция с питоном
От: zaichatki  
Дата: 19.06.11 09:14
Оценка:
Есть большое желание прикрутить HTMLayout к питону. Поиском нашел что вопрос пару раз поднимался, но насколько я понял никто так и не взялся.
Пытаюсь пока прикрутить обвязку к си интерфейсу (через ctypes), вроде бы почти завелось но какие-то кривые события в обработчик приходят.
Тестовый код выглядит примерно так:
def wndproc(hWnd, message, wParam, lParam):
    (handled, res) = HTMLayoutProcND(hWnd, message, wParam, lParam)
    if handled:
        return res
    if message == WM_CLOSE or message == WM_DESTROY:
        win32gui.PostQuitMessage(0)
    return win32gui.DefWindowProc(hWnd, message, wParam, lParam)

def event_callback(tag, elem, event, params):
    if event == HANDLE_BEHAVIOR_EVENT:
        id = HTMLayoutGetAttributeByName(elem, "id")
        bp = cast(params, POINTER(BEHAVIOR_EVENT_PARAMS)).contents
        print "%s %d:  %s" % (id, bp.cmd, ByteToHex(buffer(bp)))
    return False

...
hWnd = win32gui.CreateWindow("HTMLayoutDemo", ...
HTMLayoutProcND(hWnd, WM_CREATE, 0, 0) # Костыль для win32gui - WN_CREATE не приходит в wndproc
win32gui.ShowWindow(hWnd, SW_SHOWNORMAL)
HTMLayoutLoadHtml(hWnd, "<html><body>Hello world!!<p/><button id='btn'>Press me</button></body></html>")
HTMLayoutWindowAttachEventHandler(hWnd, event_callback, 0, HANDLE_ALL)


Окно появляется, но после нажатия на кнопку в консоль выводится
btn 32768:  00 80 00 00 A8 D9 B3 01 A8 D9 B3 01 01 00 00 00
btn 65536:  00 00 01 00 A8 D9 B3 01 A8 D9 B3 01 01 00 00 00

т. е. событий BUTTON_PRESS, BUTTON_CLICK не видно. Есть какие-нибудь идеи почему могут не приходить события?
Возможно конечно что с маршаллингом данных из си какие-то проблемы, но в си приложении при нажатии на кнопку приходят четыре события — 32769, 1, 32768, 0.
Может быть какие-то проблемы с win32gui, уже нарвался на то что WM_CREATE в wndproc он не пробрасывает. HTMLayout кроме WM_CREATE ожидает еще что-нибудь при создании окна?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.