|
|
//
// mxToolKit (c) 1999 by Mete Ciragan
//
// file: mxWidget.cpp
// implementation: Win32 API
// last modified: Mar 19 1999, Mete Ciragan
// copyright: The programs and associated files contained in this
// distribution were developed by Mete Ciragan. The programs
// are not in the public domain, but they are freely
// distributable without licensing fees. These programs are
// provided without guarantee or warrantee expressed or
// implied.
//
#include "mxtk/mxWidget.h"
#include <windows.h>
#include <commctrl.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
void mxTab_resizeChild (HWND hwnd); void mx_addWidget (mxWidget *widget); void mx_removeWidget (mxWidget *widget);
class mxWidget_i { public: mxWindow *d_parent_p; HWND d_hwnd; void *d_userData; int d_type; };
mxWidget::mxWidget (mxWindow *parent, int x, int y, int w, int h, const char *label) { d_this = new mxWidget_i;
setHandle (0); setType (-1); setParent (parent); setBounds (x, y, w, h); setVisible (true); setEnabled (true); setId (0); setUserData (0); setLabel (label);
mx_addWidget (this); }
mxWidget::~mxWidget () { mx_removeWidget (this);
if (d_this->d_type == MX_MENU || d_this->d_type == MX_MENUBAR || d_this->d_type == MX_POPUPMENU) DestroyMenu ((HMENU) d_this->d_hwnd); else DestroyWindow (d_this->d_hwnd);
delete d_this; }
bool mxWidget::CanClose() { // Assume yes
return true; }
void mxWidget::OnDelete() { // Nothing
}
void mxWidget::setHandle (void *handle) { d_this->d_hwnd = (HWND) handle; }
void mxWidget::setType (int type) { d_this->d_type = type; }
void mxWidget::setParent (mxWindow *parentWindow) { d_this->d_parent_p = parentWindow; }
void mxWidget::setBounds (int x, int y, int w, int h) { char str[128]; GetClassName (d_this->d_hwnd, str, 128);
if (!strcmp (str, "COMBOBOX")) MoveWindow (d_this->d_hwnd, x, y, w, h + 100, TRUE); else MoveWindow (d_this->d_hwnd, x, y, w, h, TRUE);
if (!strcmp (str, WC_TABCONTROL)) mxTab_resizeChild (d_this->d_hwnd); }
void mxWidget::setLabel (const char *format, ... ) { if (format == NULL) { if (d_this->d_hwnd) { SetWindowText (d_this->d_hwnd, NULL); } return; }
va_list argptr; static char string[1024]; va_start (argptr, format); vsprintf (string, format,argptr); va_end (argptr);
if (d_this->d_hwnd) { SetWindowText (d_this->d_hwnd, string); } }
void mxWidget::setVisible (bool b) { if (b) SetWindowPos (d_this->d_hwnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW); else ShowWindow (d_this->d_hwnd, SW_HIDE); }
void mxWidget::setEnabled (bool b) { EnableWindow (d_this->d_hwnd, b); }
void mxWidget::setId (int id) { SetWindowLong (d_this->d_hwnd, GWL_ID, (LONG) id); }
void mxWidget::setUserData (void *userData) { d_this->d_userData = userData; }
void* mxWidget:: getHandle () const { return (void *) d_this->d_hwnd; }
int mxWidget::getType () const { return d_this->d_type; }
mxWindow* mxWidget::getParent () const { return d_this->d_parent_p; }
int mxWidget::x () const { RECT rc; GetWindowRect (d_this->d_hwnd, &rc); return (int) rc.left; }
int mxWidget::y () const { RECT rc; GetWindowRect (d_this->d_hwnd, &rc); return (int) rc.top; }
int mxWidget::w () const { RECT rc; GetWindowRect (d_this->d_hwnd, &rc); return (int) (rc.right - rc.left); }
int mxWidget::h () const { RECT rc; GetWindowRect (d_this->d_hwnd, &rc); return (int) (rc.bottom - rc.top); }
int mxWidget::w2 () const { RECT rc; GetClientRect (d_this->d_hwnd, &rc); return (int) (rc.right - rc.left); }
int mxWidget::h2 () const { RECT rc; GetClientRect (d_this->d_hwnd, &rc); return (int) (rc.bottom - rc.top); }
const char* mxWidget::getLabel () const { static char label[256]; GetWindowText (d_this->d_hwnd, label, 256); return label; }
bool mxWidget::isVisible () const { return ( IsWindowVisible (d_this->d_hwnd) ? true : false ); }
bool mxWidget::isEnabled () const { return ( IsWindowEnabled (d_this->d_hwnd) ? true : false ); }
int mxWidget::getId () const { return (int) GetWindowLong (d_this->d_hwnd, GWL_ID); }
void* mxWidget::getUserData () const { return d_this->d_userData; }
|