[wxPython] How to trigger EVT_SIZE from external source?

Working in Win32...

I'm trying to find a message id which wxPython would accept from an
external source, which I can use as a callback message for an event
which would be passed by the OS. I can tell the OS the window handle
(referring to a subclass of wxFrame) and the message id to use, but so
far, no message id I've specified (including wxEVT_SIZE) triggers the
event.

How would I go about finding a message id which the OS could pass to the
window, and make sure the window is able to receive and act upon this
message?

I've included the source code as it stands now for reference. The
message id gets assigned to abd.uCallbackMessage in the Dock() function.
Based on my testing to date, the values for abd are passed correctly to
the system -- I'm just wanting to make sure if (1) what I'm seeking is
possible, (2) if so, what my error is. I'd rather not try to tackle
PythonWin.

···

----------
Keith J. Farmer
kfarmer@thuban.org
http://www.thuban.org

from wxPython.wx import *
import shellapi, PyAppBar, win32api, win32con

class AppBarFrame(wxFrame):
  edges = (shellapi.ABE_TOP, shellapi.ABE_LEFT,
shellapi.ABE_RIGHT, shellapi.ABE_BOTTOM)

  def __init__(self):
    wxFrame.__init__(self, None, -1, "",
style=wxFRAME_TOOL_WINDOW | wxSIMPLE_BORDER)
    self.SetPosition((0,0))
    self.SetSize((1024, 100))
    self.n_edge = 0
    self.IsDocked = 0
    self.hWnd = self.GetHandle()
    EVT_LEFT_DOWN(self, self.OnClick)
    EVT_RIGHT_DOWN(self, self.OnChange)
    EVT_SIZE(self, self.OnSize)
    self.Dock()
    self.Show(true)
  
  def OnClick(self, evt):
    print "OnClick()"
    self.UnDock()
    self.Close()
  
  def OnSize(self, evt):
    print "OnSize()"
    self.ReDock()
  
  def OnChange(self, evt):
    print "OnChange()"
    self.UnDock()
    self.n_edge = (self.n_edge + 1) % 4
    self.Dock()

  def ReDock(self, evt):
    print "ReDock()"
    self.UnDock()
    self.Dock()
  
  def CurrEdge(self):
    result = self.edges[self.n_edge]
    if result == shellapi.ABE_BOTTOM:
      side = "Bottom"
    elif result == shellapi.ABE_LEFT:
      side = "Left"
    elif result == shellapi.ABE_RIGHT:
      side = "Right"
    elif result == shellapi.ABE_TOP:
      side = "Top"
    print "CurrEdge(): n_edge = %s -> %s" % (self.n_edge,
side)
    return self.edges[self.n_edge]
  
  def UnDock(self):
    print "UnDocking...",
    rect = self.GetRect()
    abd = PyAppBar.AppBarData()
    abd.hWnd = self.hWnd
    abd.uEdge = self.CurrEdge()
    (abd.rc.left, abd.rc.top, abd.rc.right, abd.rc.bottom) =
(rect.GetLeft(), rect.GetTop(), rect.GetRight(), rect.GetBottom())
    PyAppBar.SHAppBarMessage(shellapi.ABM_REMOVE, abd)
    self.IsDocked = 0
    print "done"
  
  def Dock(self):
    print
    print "Docking...",
    rect = self.GetRect()
    
    abd = PyAppBar.AppBarData()
    abd.hWnd = self.hWnd
    abd.uEdge = self.CurrEdge()
    (abd.rc.left, abd.rc.top, abd.rc.right, abd.rc.bottom) =
(rect.GetLeft(), rect.GetTop(), rect.GetRight(), rect.GetBottom())
    abd.uCallbackMessage = wxEVT_SIZE
  
    if (PyAppBar.SHAppBarMessage(shellapi.ABM_NEW, abd) ==
0):
      print "Failed to register"
      return 0
  
    self.AppBarQueryPos(abd)
    self.IsDocked = 1
    print "done"
    return 1
  
  def AppBarQueryPos(self, abd):
    print "Querying Position...",
    iHeight = 100;
    iWidth = 100;
    screenX =
win32api.GetSystemMetrics(win32con.SM_CXSCREEN)
    screenY =
win32api.GetSystemMetrics(win32con.SM_CYSCREEN)
    print "screenX, Y = %s, %s" % (screenX, screenY)
    
    # Copy the screen coordinates of the appbar's bounding
    # rectangle into the APPBARDATA structure.
    abd.rc.top = 0
    abd.rc.bottom = screenY
    abd.rc.left = 0
    abd.rc.right = screenX

    if (abd.uEdge == shellapi.ABE_LEFT):
      abd.rc.right = abd.rc.left + iWidth
    elif (abd.uEdge == shellapi.ABE_RIGHT):
      abd.rc.right = screenX
      abd.rc.left = abd.rc.right - iWidth
    elif (abd.uEdge == shellapi.ABE_TOP):
      abd.rc.bottom = abd.rc.top + iHeight
    elif (abd.uEdge == shellapi.ABE_BOTTOM):
      abd.rc.top = abd.rc.bottom - iHeight
    
    # Query the system for an approved size and position.
    print "initial abd = " + str(abd)
    PyAppBar.SHAppBarMessage(shellapi.ABM_QUERYPOS, abd)
    
    # Adjust the rectangle, depending on the edge to which
the
    # appbar is anchored.
    if (abd.uEdge == shellapi.ABE_LEFT):
      abd.rc.right = abd.rc.left + iWidth
    elif (abd.uEdge == shellapi.ABE_RIGHT):
      abd.rc.left = abd.rc.right - iWidth
    elif (abd.uEdge == shellapi.ABE_TOP):
      abd.rc.bottom = abd.rc.top + iHeight
    elif (abd.uEdge == shellapi.ABE_BOTTOM):
      abd.rc.top = abd.rc.bottom - iHeight
    
    #Pass the final bounding rectangle to the system.
    print "final abd = " + str(abd)
    PyAppBar.SHAppBarMessage(shellapi.ABM_SETPOS, abd)
    self.SetDimensions(abd.rc.left, abd.rc.top, abd.rc.right
- abd.rc.left, abd.rc.bottom - abd.rc.top)
    print "done"
    
class App(wxApp):
  def OnInit(self):
    frame = AppBarFrame()
    return true

if __name__ == '__main__':
  app = App(0)
  app.MainLoop()