Exemple #1
0
static void Application_processMessageQueue() {
  while(!messageQueue.empty()) {
    Message message = messageQueue.takeFirst();
    if(message.type == Message::Type::ListView_OnActivate) {
      ListView* listView = (ListView*)message.object;
      if(listView->onActivate) listView->onActivate();
    }
  }
}
Exemple #2
0
static LRESULT CALLBACK Shared_windowProc(WindowProc windowProc, HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) {
  Object* object = (Object*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
  if(object == nullptr) return DefWindowProc(hwnd, msg, wparam, lparam);
  Window& window = dynamic_cast<Window*>(object) ? *(Window*)object : *((Widget*)object)->Sizable::state.window;

  bool process = true;
  if(!pWindow::modal.empty() && !pWindow::modal.find(&window.p)) process = false;
  if(applicationState.quit) process = false;
  if(process == false) return DefWindowProc(hwnd, msg, wparam, lparam);

  switch(msg) {
  case WM_CTLCOLORBTN:
  case WM_CTLCOLORSTATIC: {
    Object* object = (Object*)GetWindowLongPtr((HWND)lparam, GWLP_USERDATA);
    if(object == nullptr) break;
    if(dynamic_cast<HexEdit*>(object) || dynamic_cast<LineEdit*>(object) || dynamic_cast<TextEdit*>(object)) {
      //text edit controls, when disabled, use CTLCOLORSTATIC instead of CTLCOLOREDIT
      //override this behavior: we do not want read-only edit controls to use the parent window background color
      return windowProc(hwnd, WM_CTLCOLOREDIT, wparam, lparam);
    } else if(!GetParentWidget((Sizable*)object) && window.p.brush) {
      SetBkColor((HDC)wparam, window.p.brushColor);
      return (INT_PTR)window.p.brush;
    }
    break;
  }

  case WM_DRAWITEM: {
    unsigned id = LOWORD(wparam);
    HWND control = GetDlgItem(hwnd, id);
    Object* object = (Object*)GetWindowLongPtr(control, GWLP_USERDATA);
    if(object == nullptr) break;
    if(dynamic_cast<TabFrame*>(object)) { ((TabFrame*)object)->p.onDrawItem(lparam); return TRUE; }
    break;
  }

  case WM_COMMAND: {
    unsigned id = LOWORD(wparam);
    HWND control = GetDlgItem(hwnd, id);
    Object* object = control ? (Object*)GetWindowLongPtr(control, GWLP_USERDATA) : pObject::find(id);
    if(object == nullptr) break;
    if(dynamic_cast<Item*>(object)) { ((Item*)object)->p.onActivate(); return FALSE; }
    if(dynamic_cast<CheckItem*>(object)) { ((CheckItem*)object)->p.onToggle(); return FALSE; }
    if(dynamic_cast<RadioItem*>(object)) { ((RadioItem*)object)->p.onActivate(); return FALSE; }
    if(dynamic_cast<Button*>(object)) { ((Button*)object)->p.onActivate(); return FALSE; }
    if(dynamic_cast<CheckButton*>(object)) { ((CheckButton*)object)->p.onToggle(); return FALSE; }
    if(dynamic_cast<CheckLabel*>(object)) { ((CheckLabel*)object)->p.onToggle(); return FALSE; }
    if(dynamic_cast<ComboButton*>(object) && HIWORD(wparam) == CBN_SELCHANGE) { ((ComboButton*)object)->p.onChange(); return FALSE; }
    if(dynamic_cast<LineEdit*>(object) && HIWORD(wparam) == EN_CHANGE) { ((LineEdit*)object)->p.onChange(); return FALSE; }
    if(dynamic_cast<RadioButton*>(object)) { ((RadioButton*)object)->p.onActivate(); return FALSE; }
    if(dynamic_cast<RadioLabel*>(object)) { ((RadioLabel*)object)->p.onActivate(); return FALSE; }
    if(dynamic_cast<TextEdit*>(object) && HIWORD(wparam) == EN_CHANGE) { ((TextEdit*)object)->p.onChange(); return FALSE; }
    break;
  }

  case WM_NOTIFY: {
    unsigned id = LOWORD(wparam);
    HWND control = GetDlgItem(hwnd, id);
    Object* object = (Object*)GetWindowLongPtr(control, GWLP_USERDATA);
    if(object == nullptr) break;
    if(dynamic_cast<ListView*>(object) && ((LPNMHDR)lparam)->code == LVN_ITEMACTIVATE) { ((ListView*)object)->p.onActivate(lparam); break; }
    if(dynamic_cast<ListView*>(object) && ((LPNMHDR)lparam)->code == LVN_ITEMCHANGED) { ((ListView*)object)->p.onChange(lparam); break; }
    if(dynamic_cast<ListView*>(object) && ((LPNMHDR)lparam)->code == NM_CUSTOMDRAW) { return ((ListView*)object)->p.onCustomDraw(lparam); }
    if(dynamic_cast<TabFrame*>(object) && ((LPNMHDR)lparam)->code == TCN_SELCHANGE) { ((TabFrame*)object)->p.onChange(); break; }
    break;
  }

  case WM_APP + AppMessage::ListView_onActivate: {
    ListView* listView = (ListView*)lparam;
    if(listView && listView->onActivate) listView->onActivate();
    break;
  }

  case WM_HSCROLL:
  case WM_VSCROLL: {
    Object* object = nullptr;
    if(lparam) {
      object = (Object*)GetWindowLongPtr((HWND)lparam, GWLP_USERDATA);
    } else {
      unsigned id = LOWORD(wparam);
      HWND control = GetDlgItem(hwnd, id);
      object = (Object*)GetWindowLongPtr(control, GWLP_USERDATA);
    }
    if(object == nullptr) break;
    if(dynamic_cast<HorizontalScroller*>(object)) { ((HorizontalScroller*)object)->p.onChange(wparam); return TRUE; }
    if(dynamic_cast<VerticalScroller*>(object)) { ((VerticalScroller*)object)->p.onChange(wparam); return TRUE; }
    if(dynamic_cast<HorizontalSlider*>(object)) { ((HorizontalSlider*)object)->p.onChange(); return TRUE; }
    if(dynamic_cast<VerticalSlider*>(object)) { ((VerticalSlider*)object)->p.onChange(); return TRUE; }
    break;
  }
  }

  return windowProc(hwnd, msg, wparam, lparam);
}