def onMESSAGE(self, hwnd, msg, wp, lp): if msg==fw.WND_WM_NOTIFY: if wp==fw.WND_NM_MSGREFLECT: msgr= fw.WND_MSGREFLECT.from_address(lp) msgr.fReturn= self._base_fMsgReflect if msgr.msg==self.Msg.WM_NOTIFY: nm = NMHDR.from_address(msgr.lParam) if nm.code == self.Msg.TCN_SELCHANGING: if self.onMSG(hwnd, "selchanging", self.GetSelected(), 0)==False: return 1 elif nm.code == self.Msg.TCN_SELCHANGE: self.onMSG(hwnd, "selchanged", self.GetSelected(), 0) elif nm.code==self.Msg.NM_RELEASEDCAPTURE: self.onMSG(hwnd, "releasedcapture", 0, 0) elif nm.code==self.Msg.NM_CLICK: self.onMSG(hwnd, "click", 0, 0) elif nm.code==self.Msg.NM_RCLICK: self.onMSG(hwnd, "rclick", 0, 0) elif nm.code==self.Msg.TCN_KEYDOWN: nmk= NMTCKEYDOWN.from_address(lp) self.onMSG(hwnd, "keydown", 0, (nmk.wVKey, nmk.flags)) elif nm.code==self.Msg.TCN_FOCUSCHANGE: self.onMSG(hwnd, "focuschange", 0, 0) return 0 elif msg==self.Msg.WM_DESTROY: self.onMSG(hwnd, "destroy", 0, 0)
def GetNm(self, lp): nm = NMHDR.from_address(lp) try: n = self.msgValues.index(nm.code) return self.msgNames[n], nm.code except: return 'UNKNOWN MSG', nm.code
def onMESSAGE(self, hwnd, msg, wp, lp): if msg == fw.WND_WM_NOTIFY: if wp == fw.WND_NM_MSGREFLECT: msgr = fw.WND_MSGREFLECT.from_address(lp) msgr.fReturn = self._base_fMsgReflect if msgr.msg == self.Msg.WM_NOTIFY: nm = NMHDR.from_address(msgr.lParam) if nm.code == self.Msg.PGN_CALCSIZE: nmc = NMPGCALCSIZE.from_address(msgr.lParam) if nmc.dwFlag == PGF_CALCHEIGHT: result = self.onMSG(hwnd, "calcsize", "height", 0) if isinstance(result, (int, long)): nmc.iHeight = result elif nmc.dwFlag == PGF_CALCWIDTH: result = self.onMSG(hwnd, "calcsize", "width", 0) if isinstance(result, (int, long)): nmc.iWidth = result elif nm.code == self.Msg.NM_RELEASEDCAPTURE: self.onMSG(hwnd, "releasedcapture", 0, 0) return 0 # Not working #elif nm.code ==self.Msg.PGN_SCROLL: # nmps=NMPGSCROLL.from_address(lp) elif msg == self.Msg.WM_DESTROY: self.onMSG(hwnd, "destroy", 0, 0)
def onMESSAGE(self, hwnd, msg, wp, lp): if msg==fw.WND_WM_NOTIFY: if wp==fw.WND_NM_MSGREFLECT: msgr= fw.WND_MSGREFLECT.from_address(lp) msgr.fReturn= self._base_fMsgReflect if msgr.msg==self.Msg.WM_NOTIFY: nm = NMHDR.from_address(msgr.lParam) if nm.code==self.Msg.NM_CUSTOMDRAW: cd= NMCUSTOMDRAW.from_address(msgr.lParam) result= self.onMSG(hwnd, "customdraw", 0, cd) if result !=None: return result return 0 # CDRF_DODEFAULT elif nm.code==self.Msg.HDN_ITEMCLICK or nm.code==self.Msg.HDN_ITEMCLICKW: nmh = NMHEADER.from_address(msgr.lParam) if nmh.iButton==0: self.onMSG(hwnd, "itemclick", nmh.iItem, 0) elif nm.code==self.Msg.HDN_ITEMDBLCLICK or nm.code==self.Msg.HDN_ITEMDBLCLICKW: nmh = NMHEADER.from_address(msgr.lParam) if nmh.iButton==0: self.onMSG(hwnd, "itemdouble", nmh.iItem, 0) # ...not triggered, on my machine (win98) iButton is allways # zero #if nmh.iButton==0: # self.onMSG(hwnd, "lmbdouble", nmh.iItem, 0) #elif nmh.iButton==1: # self.onMSG(hwnd, "rmbdouble", nmh.iItem, 0) #elif nmh.iButton==2: # self.onMSG(hwnd, "mmbdouble", nmh.iItem, 0) elif nm.code==self.Msg.HDN_BEGINTRACK or nm.code==self.Msg.HDN_BEGINTRACKW: # no further info in NMHEADER self.onMSG(hwnd, "begintrack", 0, 0) elif nm.code==self.Msg.HDN_ENDTRACK: # no further info in NMHEADER self.onMSG(hwnd, "endtrack", 0, 0) return 0 # keyboard non HDS_BUTTON style elif msg==self.Msg.WM_RBUTTONUP: if not self.GetStyleL('style') & self.Style.HDS_BUTTONS: self.onMSG(hwnd, "rmbup", wp, (HIWORD(lp), LOWORD(lp))) elif msg==self.Msg.WM_LBUTTONUP: if not self.GetStyleL('style') & self.Style.HDS_BUTTONS: self.onMSG(hwnd, "lmbup", wp, (HIWORD(lp), LOWORD(lp))) elif msg==self.Msg.WM_LBUTTONDBLCLK: if not self.GetStyleL('style') & self.Style.HDS_BUTTONS: self.onMSG(hwnd, "lmbdouble", wp, (HIWORD(lp), LOWORD(lp))) elif msg==self.Msg.WM_MOUSEACTIVATE: self.onMSG(hwnd, "mouseactivate", 0, 0) elif msg==self.Msg.WM_DESTROY: self.onMSG(hwnd, "destroy", 0, 0)
def IsReflectMessage(hwnd, msg, wp, lp): if msg==273: # WM_COMMAND if lp: return ReflectMessage(hwnd, lp, msg, wp, lp) elif msg==276: # WM_HSCROLL if lp: return ReflectMessage(hwnd, lp, msg, wp, lp) elif msg==277: # WM_VSCROLL if lp: return ReflectMessage(hwnd, lp, msg, wp, lp) elif msg==78: # WM_NOTIFY nm = NMHDR.from_address(lp) return ReflectMessage(hwnd, nm.hwndFrom, msg, wp, lp) elif msg==43: # WM_DRAWITEM # NOTE # can not reflect to comboboxes (ODT_COMBOBOX) # they do block all messages here # ?? do it anyway if wp: return ReflectMessage(hwnd, user32.GetDlgItem(hwnd, wp), msg, wp, lp) ## let menu messages slip elif msg==44: # WM_MEASUREITEN # NOTE # can not reflect to comboboxes (ODT_COMBOBOX) # they do block all messages here # ?? do it anyway if wp: return ReflectMessage(hwnd, user32.GetDlgItem(hwnd, wp),msg, wp, lp) ## let menu messages slip return None
def onMESSAGE(self, hwnd, msg, wp, lp): if msg == fw.WND_WM_NOTIFY: if wp == fw.WND_NM_MSGREFLECT: msgr = fw.WND_MSGREFLECT.from_address(lp) msgr.fReturn = self._base_fMsgReflect nm = NMHDR.from_address(msgr.lParam) if nm.code == self.Msg.TTN_POP: self.onMSG(self.Hwnd, "pop", msgr.hwndFrom, nm.idFrom) elif nm.code == self.Msg.TTN_SHOW: self.onMSG(self.Hwnd, "show", msgr.hwndFrom, nm.idFrom) elif nm.code == self.Msg.TTN_GETDISPINFO or nm.code == self.Msg.TTN_GETDISPINFOW: nmd = NMTTDISPINFO.from_address(msgr.lParam) result = self.onMSG(self.Hwnd, "getdispinfo", msgr.hwndFrom, nm.idFrom) if type(result) == type(''): nmd.lpszText = self._client_TruncText(result) elif nm.code == self.Msg.NM_CUSTOMDRAW: cd = NMTTCUSTOMDRAW.from_address(msgr.lParam) result = self.onMSG(self.Hwnd, "customdraw", (msgr.hwndFrom, cd.hdr.idFrom), cd) if result == None: return 0 # CDRF_DODEFAULT return result return 0 elif msg == self.Msg.WM_DESTROY: self.onMSG(hwnd, "destroy", 0, 0)
def onMESSAGE(self, hwnd, msg, wp, lp): if msg == self.Msg.WM_SETFOCUS: self.onMSG(hwnd, "setfocus", wp, lp) elif msg == self.Msg.WM_KILLFOCUS: self.onMSG(hwnd, "killfocus", wp, lp) if wp == fw.WND_NM_MSGREFLECT: msgr = fw.WND_MSGREFLECT.from_address(lp) msgr.fReturn = self._base_fMsgReflect if msgr.msg == self.Msg.WM_NOTIFY: nm = NMHDR.from_address(msgr.lParam) if nm.code == self.Msg.MCN_SELCHANGE: nmsc = NMSELCHANGE.from_address(msgr.lParam) st1 = nmsc.stSelStart st2 = nmsc.stSelEnd self.onMSG(hwnd, "selchanbge", (st1, st2), 0) return 0 if nm.code == self.Msg.MCN_SELECT: nmsc = NMSELCHANGE.from_address(msgr.lParam) st1 = nmsc.stSelStart st2 = nmsc.stSelEnd self.onMSG(hwnd, "select", (st1, st2), 0) return 0 if nm.code == self.Msg.NM_RELEASEDCAPTURE: self.onMSG(hwnd, "releasedcapture", 0, 0) return 0
def onMESSAGE(self, hwnd, msg, wp, lp): if msg==fw.WND_WM_NOTIFY: if wp==fw.WND_NM_MSGREFLECT: msgr= fw.WND_MSGREFLECT.from_address(lp) msgr.fReturn= self._base_fMsgReflect nm=NMHDR.from_address(msgr.lParam) if nm.code==self.Msg.TTN_POP: self.onMSG(self.Hwnd, "pop", msgr.hwndFrom, nm.idFrom) elif nm.code==self.Msg.TTN_SHOW: self.onMSG(self.Hwnd, "show", msgr.hwndFrom, nm.idFrom) elif nm.code==self.Msg.TTN_GETDISPINFO or nm.code==self.Msg.TTN_GETDISPINFOW: nmd=NMTTDISPINFO.from_address(msgr.lParam) result=self.onMSG(self.Hwnd, "getdispinfo", msgr.hwndFrom, nm.idFrom) if type(result)==type(''): nmd.lpszText = self._client_TruncText(result) elif nm.code == self.Msg.NM_CUSTOMDRAW: cd = NMTTCUSTOMDRAW.from_address(msgr.lParam) result= self.onMSG(self.Hwnd, "customdraw", (msgr.hwndFrom, cd.hdr.idFrom), cd) if result==None: return 0 # CDRF_DODEFAULT return result return 0 elif msg==self.Msg.WM_DESTROY: self.onMSG(hwnd, "destroy", 0, 0)
def onMESSAGE(self, hwnd, msg, wp, lp): if msg==self.Msg.WM_SETFOCUS: self.onMSG(hwnd, "setfocus", wp, lp) elif msg==self.Msg.WM_KILLFOCUS: self.onMSG(hwnd, "killfocus", wp, lp) if wp==fw.WND_NM_MSGREFLECT: msgr= fw.WND_MSGREFLECT.from_address(lp) msgr.fReturn= self._base_fMsgReflect if msgr.msg==self.Msg.WM_NOTIFY: nm=NMHDR.from_address(msgr.lParam) if nm.code==self.Msg.MCN_SELCHANGE: nmsc=NMSELCHANGE.from_address(msgr.lParam) st1=nmsc.stSelStart st2=nmsc.stSelEnd self.onMSG(hwnd, "selchanbge", (st1, st2), 0) return 0 if nm.code==self.Msg.MCN_SELECT: nmsc=NMSELCHANGE.from_address(msgr.lParam) st1=nmsc.stSelStart st2=nmsc.stSelEnd self.onMSG(hwnd, "select", (st1, st2), 0) return 0 if nm.code==self.Msg.NM_RELEASEDCAPTURE: self.onMSG(hwnd, "releasedcapture", 0, 0) return 0
def onMESSAGE(self, hwnd, msg, wp, lp): if msg==fw.WND_WM_NOTIFY: if wp==fw.WND_NM_MSGREFLECT: msgr= fw.WND_MSGREFLECT.from_address(lp) msgr.fReturn= self._base_fMsgReflect if msgr.msg==self.Msg.WM_NOTIFY: nm = NMHDR.from_address(msgr.lParam) if nm.code ==self.Msg.PGN_CALCSIZE: nmc=NMPGCALCSIZE.from_address(msgr.lParam) if nmc.dwFlag==PGF_CALCHEIGHT: result=self.onMSG(hwnd, "calcsize", "height", 0) if isinstance(result, (int, long)): nmc.iHeight=result elif nmc.dwFlag==PGF_CALCWIDTH: result=self.onMSG(hwnd, "calcsize", "width", 0) if isinstance(result, (int, long)): nmc.iWidth=result elif nm.code ==self.Msg.NM_RELEASEDCAPTURE: self.onMSG(hwnd, "releasedcapture", 0, 0) return 0 # Not working #elif nm.code ==self.Msg.PGN_SCROLL: # nmps=NMPGSCROLL.from_address(lp) elif msg==self.Msg.WM_DESTROY: self.onMSG(hwnd, "destroy", 0, 0)
def IsDialogReflectMessage(hwnd, msg, wp, lp, dlgmode): #print dlgmode ## TODO: test ## filter WM_COMMAND for dialog boxes if msg==273: # WM_COMMAND #print wp, lp if lp: if dlgmode=='modeless': return ReflectMessage(hwnd, lp, msg, wp, lp) if lp !=1: # IDOK if lp != 2: # IDCANCEL #DM_GETDEFID = WM_USER + 0 result= user32.SendMessageA(hwnd, 1024, 0, 0) if HIWORD(result) == 21323: # DC_HASDEFID defID= user32.GetDlgItem(hwnd, LOWORD(result)) if defID != lp: return ReflectMessage(hwnd, lp, msg, wp, lp) else: return ReflectMessage(hwnd, lp, msg, wp, lp) elif msg==276: # WM_HSCROLL if lp: return ReflectMessage(hwnd, lp, msg, wp, lp) elif msg==277: # WM_VSCROLL if lp: return ReflectMessage(hwnd, lp, msg, wp, lp) elif msg==78: # WM_NOTIFY nm = NMHDR.from_address(lp) return ReflectMessage(hwnd, nm.hwndFrom, msg, wp, lp) elif msg==43: # WM_DRAWITEM # NOTE # can not reflect to comboboxes (ODT_COMBOBOX) # they do block all messages here # ?? do it anyway return ReflectMessage(hwnd, user32.GetDlgItem(hwnd, wp), msg, wp, lp) elif msg==44: # WM_MEASUREITEN # NOTE # can not reflect to comboboxes (ODT_COMBOBOX) # they do block all messages here # ?? do it anyway return ReflectMessage(hwnd, user32.GetDlgItem(hwnd, wp),msg, wp, lp) return None
def IsDialogReflectMessage(hwnd, msg, wp, lp, dlgmode): #print dlgmode ## TODO: test ## filter WM_COMMAND for dialog boxes if msg == 273: # WM_COMMAND #print wp, lp if lp: if dlgmode == 'modeless': return ReflectMessage(hwnd, lp, msg, wp, lp) if lp != 1: # IDOK if lp != 2: # IDCANCEL #DM_GETDEFID = WM_USER + 0 result = user32.SendMessageA(hwnd, 1024, 0, 0) if HIWORD(result) == 21323: # DC_HASDEFID defID = user32.GetDlgItem(hwnd, LOWORD(result)) if defID != lp: return ReflectMessage(hwnd, lp, msg, wp, lp) else: return ReflectMessage(hwnd, lp, msg, wp, lp) elif msg == 276: # WM_HSCROLL if lp: return ReflectMessage(hwnd, lp, msg, wp, lp) elif msg == 277: # WM_VSCROLL if lp: return ReflectMessage(hwnd, lp, msg, wp, lp) elif msg == 78: # WM_NOTIFY nm = NMHDR.from_address(lp) return ReflectMessage(hwnd, nm.hwndFrom, msg, wp, lp) elif msg == 43: # WM_DRAWITEM # NOTE # can not reflect to comboboxes (ODT_COMBOBOX) # they do block all messages here # ?? do it anyway return ReflectMessage(hwnd, user32.GetDlgItem(hwnd, wp), msg, wp, lp) elif msg == 44: # WM_MEASUREITEN # NOTE # can not reflect to comboboxes (ODT_COMBOBOX) # they do block all messages here # ?? do it anyway return ReflectMessage(hwnd, user32.GetDlgItem(hwnd, wp), msg, wp, lp) return None
def onMESSAGE(self, hwnd, msg, wp, lp): if msg == self.Msg.WM_SETFOCUS: self.onMSG(hwnd, "setfocus", wp, lp) elif msg == self.Msg.WM_KILLFOCUS: self.onMSG(hwnd, "killfocus", wp, lp) if msg == fw.WND_WM_NOTIFY: if wp == fw.WND_NM_MSGREFLECT: msgr = fw.WND_MSGREFLECT.from_address(lp) msgr.fReturn = self._base_fMsgReflect if msgr.msg == self.Msg.WM_NOTIFY: nm = NMHDR.from_address(msgr.lParam) if nm.code == self.Msg.DTN_CLOSEUP: self.onMSG(hwnd, "closemonthcal", 0, 0) return 0 elif nm.code == self.Msg.DTN_DROPDOWN: self.onMSG(hwnd, "openmonthcal", 0, 0) return 0 elif nm.code == self.Msg.DTN_DATETIMECHANGE: nmd = NMDATETIMECHANGE.from_address(msgr.lParam) if nmd.dwFlags == GDT_VALID: flag = 'valid' elif nmd.dwFlags == GDT_NONE: flag = 'none' elif nmd.dwFlags == DWORD(-1).value: flag = 'error' else: flag = 'unknown' self.onMSG(hwnd, "datechange", nmd.st, flag) elif nm.code == self.Msg.DTN_USERSTRING: dt = NMDATETIMESTRING.from_address(msgr.lParam) result = self.onMSG(hwnd, "userstring", dt.st, dt.pszUserString) if result == True: dt.dwFlags = GDT_VALID elif result == False: dt.dwFlags = GDT_NONE return 0
def onMESSAGE(self, hwnd, msg, wp, lp): if msg==fw.WND_WM_NOTIFY: if wp==fw.WND_NM_MSGREFLECT: msgr= fw.WND_MSGREFLECT.from_address(lp) msgr.fReturn= self._base_fMsgReflect if msgr.msg==self.Msg.WM_NOTIFY: nm=NMHDR.from_address(msgr.lParam) if nm.code==self.Msg.UDN_DELTAPOS: nmud=NMUPDOWN.from_address(msgr.lParam) if self.onMSG(hwnd, "setpos", nmud.iPos, \ nmud.iDelta)==False: return 1 return 0 if nm.code==self.Msg.NM_RELEASEDCAPTURE: self.onMSG(hwnd, "releasedcapture", 0, 0) return 0 elif msg==self.Msg.WM_DESTROY: self.onMSG(hwnd, "destroy", 0, 0)
def onMESSAGE(self, hwnd, msg, wp, lp): if msg==self.Msg.WM_SETFOCUS: self.onMSG(hwnd, "setfocus", wp, lp) elif msg==self.Msg.WM_KILLFOCUS: self.onMSG(hwnd, "killfocus", wp, lp) if msg==fw.WND_WM_NOTIFY: if wp==fw.WND_NM_MSGREFLECT: msgr= fw.WND_MSGREFLECT.from_address(lp) msgr.fReturn= self._base_fMsgReflect if msgr.msg==self.Msg.WM_NOTIFY: nm=NMHDR.from_address(msgr.lParam) if nm.code==self.Msg.DTN_CLOSEUP: self.onMSG(hwnd, "closemonthcal", 0, 0) return 0 elif nm.code==self.Msg.DTN_DROPDOWN: self.onMSG(hwnd, "openmonthcal", 0, 0) return 0 elif nm.code==self.Msg.DTN_DATETIMECHANGE: nmd=NMDATETIMECHANGE.from_address(msgr.lParam) if nmd.dwFlags==GDT_VALID: flag= 'valid' elif nmd.dwFlags==GDT_NONE: flag= 'none' elif nmd.dwFlags==DWORD(-1).value: flag= 'error' else: flag= 'unknown' self.onMSG(hwnd, "datechange", nmd.st, flag) elif nm.code==self.Msg.DTN_USERSTRING: dt= NMDATETIMESTRING.from_address(msgr.lParam) result= self.onMSG(hwnd, "userstring", dt.st, dt.pszUserString) if result==True: dt.dwFlags= GDT_VALID elif result== False: dt.dwFlags= GDT_NONE return 0
def onMESSAGE(self, hwnd, msg, wp, lp): if msg == fw.WND_WM_NOTIFY: if wp == fw.WND_NM_MSGREFLECT: msgr = fw.WND_MSGREFLECT.from_address(lp) msgr.fReturn = self._base_fMsgReflect if msgr.msg == self.Msg.WM_NOTIFY: nm = NMHDR.from_address(msgr.lParam) if nm.code == self.Msg.UDN_DELTAPOS: nmud = NMUPDOWN.from_address(msgr.lParam) if self.onMSG(hwnd, "setpos", nmud.iPos, \ nmud.iDelta)==False: return 1 return 0 if nm.code == self.Msg.NM_RELEASEDCAPTURE: self.onMSG(hwnd, "releasedcapture", 0, 0) return 0 elif msg == self.Msg.WM_DESTROY: self.onMSG(hwnd, "destroy", 0, 0)
def onMESSAGE(self, hwnd, msg, wp, lp): if msg == fw.WND_WM_NOTIFY: if wp == fw.WND_NM_MSGREFLECT: msgr = fw.WND_MSGREFLECT.from_address(lp) msgr.fReturn = self._base_fMsgReflect if msgr.msg == self.Msg.WM_NOTIFY: nm = NMHDR.from_address(msgr.lParam) if nm.code == self.Msg.NM_CUSTOMDRAW: cd = NMCUSTOMDRAW.from_address(msgr.lParam) result = self.onMSG(hwnd, "customdraw", 0, cd) if result != None: return result return 0 if nm.code == self.Msg.NM_RELEASEDCAPTURE: self.onMSG(hwnd, "releasedcapture", 0, 0) return 0 return 0 ## elif msg == self.Msg.WM_DESTROY: self.onMSG(hwnd, "destroy", 0, 0)
def onMESSAGE(self, hwnd, msg, wp, lp): if msg==fw.WND_WM_NOTIFY: if wp==fw.WND_NM_MSGREFLECT: msgr= fw.WND_MSGREFLECT.from_address(lp) msgr.fReturn= self._base_fMsgReflect if msgr.msg==self.Msg.WM_NOTIFY: nm = NMHDR.from_address(msgr.lParam) if nm.code ==self.Msg.NM_CLICK: self.onMSG(hwnd, "click", 0, 0) elif nm.code ==self.Msg.NM_DBLCLK: self.onMSG(hwnd, "dblclick", 0, 0) elif nm.code ==self.Msg.NM_RCLICK: self.onMSG(hwnd, "rclick", 0, 0) elif nm.code ==self.Msg.NM_RDBLCLK: self.onMSG(hwnd, "rdblclick", 0, 0) elif nm.code ==self.Msg.SBN_SIMPLEMODECHANGE: self.onMSG(hwnd, "simplemodechange", 0, 0) return 0 # elif msg==self.Msg.WM_DESTROY: self.onMSG(hwnd, "destroy", 0, 0)
def onMESSAGE(self, hwnd, msg, wp, lp): if msg == fw.WND_WM_NOTIFY: if wp == fw.WND_NM_MSGREFLECT: msgr = fw.WND_MSGREFLECT.from_address(lp) msgr.fReturn = self._base_fMsgReflect if msgr.msg == self.Msg.WM_NOTIFY: nm = NMHDR.from_address(msgr.lParam) if nm.code == self.Msg.NM_CLICK: self.onMSG(hwnd, "click", 0, 0) elif nm.code == self.Msg.NM_DBLCLK: self.onMSG(hwnd, "dblclick", 0, 0) elif nm.code == self.Msg.NM_RCLICK: self.onMSG(hwnd, "rclick", 0, 0) elif nm.code == self.Msg.NM_RDBLCLK: self.onMSG(hwnd, "rdblclick", 0, 0) elif nm.code == self.Msg.SBN_SIMPLEMODECHANGE: self.onMSG(hwnd, "simplemodechange", 0, 0) return 0 # elif msg == self.Msg.WM_DESTROY: self.onMSG(hwnd, "destroy", 0, 0)
def onMESSAGE(self, hwnd, msg, wp, lp): if msg==fw.WND_WM_NOTIFY: if wp==fw.WND_NM_MSGREFLECT: msgr= fw.WND_MSGREFLECT.from_address(lp) msgr.fReturn= self._base_fMsgReflect if msgr.msg==self.Msg.WM_NOTIFY: nm = NMHDR.from_address(msgr.lParam) if nm.code ==self.Msg.NM_CUSTOMDRAW: cd = NMCUSTOMDRAW.from_address(msgr.lParam) result= self.onMSG(hwnd, "customdraw", 0, cd) if result !=None: return result return 0 if nm.code ==self.Msg.NM_RELEASEDCAPTURE: self.onMSG(hwnd, "releasedcapture", 0, 0) return 0 return 0 ## elif msg==self.Msg.WM_DESTROY: self.onMSG(hwnd, "destroy", 0, 0)
def onMESSAGE(self, hwnd, msg, wp, lp): #if msg==self.Msg.WM_SETFOCUS: # self.onMSG(hwnd, "setfocus", wp, lp) #elif msg==self.Msg.WM_KILLFOCUS: # self.onMSG(hwnd, "killfocus", wp, lp) if msg==fw.WND_WM_NOTIFY: if wp==fw.WND_NM_MSGREFLECT: msgr= fw.WND_MSGREFLECT.from_address(lp) msgr.fReturn= self._base_fMsgReflect if msgr.msg==self.Msg.WM_NOTIFY: nm=NMHDR.from_address(msgr.lParam) if nm.code==self.Msg.IPN_FIELDCHANGED: nmip=NMIPADDRESS.from_address(msgr.lParam) result=self.onMSG(hwnd, "fieldchanged", nmip.iField, nmip.iValue) if isinstance(result, (int, long)): if self._IsUByte(result): nmip.iValue=result else: raise ValueError("value out of range: %s" % result) return 0 elif msg==self.Msg.WM_DESTROY: self.onMSG(hwnd, "destroy", 0, 0)
def IsReflectMessage(hwnd, msg, wp, lp): if msg == 273: # WM_COMMAND if lp: return ReflectMessage(hwnd, lp, msg, wp, lp) elif msg == 276: # WM_HSCROLL if lp: return ReflectMessage(hwnd, lp, msg, wp, lp) elif msg == 277: # WM_VSCROLL if lp: return ReflectMessage(hwnd, lp, msg, wp, lp) elif msg == 78: # WM_NOTIFY nm = NMHDR.from_address(lp) return ReflectMessage(hwnd, nm.hwndFrom, msg, wp, lp) elif msg == 43: # WM_DRAWITEM # NOTE # can not reflect to comboboxes (ODT_COMBOBOX) # they do block all messages here # ?? do it anyway if wp: return ReflectMessage(hwnd, user32.GetDlgItem(hwnd, wp), msg, wp, lp) ## let menu messages slip elif msg == 44: # WM_MEASUREITEN # NOTE # can not reflect to comboboxes (ODT_COMBOBOX) # they do block all messages here # ?? do it anyway if wp: return ReflectMessage(hwnd, user32.GetDlgItem(hwnd, wp), msg, wp, lp) ## let menu messages slip return None
def _client_DlgProc(self, hwnd, msg, wp, lp): if msg == 2: ## WM_DESTROY ## reset try: self.onMSG(hwnd, "destroy", 0, 0) finally: self.Hwnd = 0 self._client_fReboot = None if msg == fw.WND_WM_NOTIFY: if wp == fw.WND_NM_MSGREFLECT: msgr = fw.WND_MSGREFLECT.from_address(lp) msgr.fReturn = 1 if msgr.msg == WM_NOTIFY: nm = NMHDR.from_address(msgr.lParam) if nm.code == PSN_APPLY: result = self.onMSG(hwnd, "apply", msgr.hwndFrom, 0) user32.SetWindowLongA( hwnd, DWL_MSGRESULT, result == False and PSNRET_INVALID_NOCHANGEPAGE or PSNRET_NOERROR) if result != False: if self._client_mode == 'modeless': user32.DestroyWindow(self.Hwnd) elif nm.code == PSN_HELP: self.onMSG(hwnd, "help", msgr.hwndFrom, 0) elif nm.code == PSN_KILLACTIVE: result = self.onMSG(hwnd, "killactive", msgr.hwndFrom, 0) user32.SetWindowLongA(hwnd, DWL_MSGRESULT, result == False and 1 or 0) elif nm.code == PSN_QUERYCANCEL: result = self.onMSG(hwnd, "querycancel", msgr.hwndFrom, 0) user32.SetWindowLongA(hwnd, DWL_MSGRESULT, result == False and 1 or 0) if result != False: if self._client_mode == 'modeless': user32.DestroyWindow(self.Hwnd) elif nm.code == PSN_RESET: psn = PSHNOTIFY.from_address(lp) result = self.onMSG(hwnd, "reset", msgr.hwndFrom, psn.lParam and 'cancel' or 'close') elif nm.code == PSN_SETACTIVE: self.onMSG(hwnd, "setactive", msgr.hwndFrom, 0) elif nm.code == PSN_WIZBACK: result = self.onMSG(hwnd, "wizback", msgr.hwndFrom, 0) user32.SetWindowLongA(hwnd, DWL_MSGRESULT, result == False and -1 or 0) elif nm.code == PSN_WIZNEXT: result = self.onMSG(hwnd, "wiznext", msgr.hwndFrom, 0) user32.SetWindowLongA(hwnd, DWL_MSGRESULT, result == False and -1 or 0) elif nm.code == PSN_WIZFINISH: result = self.onMSG(hwnd, "wizfinish", msgr.hwndFrom, 0) user32.SetWindowLongA(hwnd, DWL_MSGRESULT, result == False and 1 or 0) if result != False: if self._client_mode == 'modeless': user32.DestroyWindow(self.Hwnd) return 1 return 0 return user32.CallWindowProcA(self._client_pOldDlgProc, hwnd, msg, wp, lp)
def _client_DlgProc(self, hwnd, msg, wp, lp): if msg==2: ## WM_DESTROY ## reset try: self.onMSG(hwnd,"destroy", 0, 0) finally: self.Hwnd= 0 self._client_fReboot= None if msg==fw.WND_WM_NOTIFY: if wp==fw.WND_NM_MSGREFLECT: msgr= fw.WND_MSGREFLECT.from_address(lp) msgr.fReturn= 1 if msgr.msg==WM_NOTIFY: nm=NMHDR.from_address(msgr.lParam) if nm.code==PSN_APPLY: result= self.onMSG(hwnd,"apply", msgr.hwndFrom, 0) user32.SetWindowLongA(hwnd, DWL_MSGRESULT, result==False and PSNRET_INVALID_NOCHANGEPAGE or PSNRET_NOERROR) if result != False: if self._client_mode=='modeless': user32.DestroyWindow(self.Hwnd) elif nm.code==PSN_HELP: self.onMSG(hwnd,"help", msgr.hwndFrom, 0) elif nm.code==PSN_KILLACTIVE: result= self.onMSG(hwnd,"killactive", msgr.hwndFrom, 0) user32.SetWindowLongA(hwnd, DWL_MSGRESULT, result==False and 1 or 0) elif nm.code==PSN_QUERYCANCEL: result= self.onMSG(hwnd,"querycancel", msgr.hwndFrom, 0) user32.SetWindowLongA(hwnd, DWL_MSGRESULT, result==False and 1 or 0) if result != False: if self._client_mode=='modeless': user32.DestroyWindow(self.Hwnd) elif nm.code==PSN_RESET: psn= PSHNOTIFY.from_address(lp) result= self.onMSG(hwnd,"reset", msgr.hwndFrom, psn.lParam and 'cancel' or 'close') elif nm.code==PSN_SETACTIVE: self.onMSG(hwnd, "setactive", msgr.hwndFrom, 0) elif nm.code==PSN_WIZBACK: result= self.onMSG(hwnd,"wizback", msgr.hwndFrom, 0) user32.SetWindowLongA(hwnd, DWL_MSGRESULT, result==False and -1 or 0) elif nm.code==PSN_WIZNEXT: result= self.onMSG(hwnd,"wiznext", msgr.hwndFrom, 0) user32.SetWindowLongA(hwnd, DWL_MSGRESULT, result==False and -1 or 0) elif nm.code==PSN_WIZFINISH: result= self.onMSG(hwnd,"wizfinish", msgr.hwndFrom, 0) user32.SetWindowLongA(hwnd, DWL_MSGRESULT, result==False and 1 or 0) if result != False: if self._client_mode=='modeless': user32.DestroyWindow(self.Hwnd) return 1 return 0 return user32.CallWindowProcA(self._client_pOldDlgProc, hwnd, msg, wp, lp)