static int winDatePickMapMethod(Ihandle* ih) { DWORD dwStyle = WS_CHILD | WS_CLIPSIBLINGS | DTS_SHORTDATECENTURYFORMAT; if (!ih->parent) return IUP_ERROR; if (iupAttribGetBoolean(ih, "CANFOCUS")) dwStyle |= WS_TABSTOP; if (!iupwinCreateWindow(ih, DATETIMEPICK_CLASS, 0, dwStyle, NULL)) return IUP_ERROR; /* Process WM_NOTIFY */ IupSetCallback(ih, "_IUPWIN_NOTIFY_CB", (Icallback)winDatePickWmNotify); if (iupwinIsVistaOrNew()) { dwStyle = MCS_NOTODAY | MCS_NOSELCHANGEONNAV; if (iupAttribGetBoolean(ih, "CALENDARWEEKNUMBERS")) dwStyle |= MCS_WEEKNUMBERS; SendMessage(ih->handle, DTM_SETMCSTYLE, 0, (LPARAM)dwStyle); } if (iupAttribGet(ih, "SEPARATOR") || iupAttribGet(ih, "ZEROPRECED") || iupAttribGet(ih, "MONTHSHORTNAMES")) winDatePickSetOrderAttrib(ih, "DMY"); return IUP_NOERROR; }
static int winButtonMapMethod(Ihandle* ih) { char* value; DWORD dwStyle = WS_CHILD | WS_CLIPSIBLINGS | BS_NOTIFY; /* necessary because of the base messages */ if (!ih->parent) return IUP_ERROR; /* Buttons with the BS_PUSHBUTTON style do NOT use the returned brush in WM_CTLCOLORBTN. Buttons with these styles are always drawn with the default system colors. So FGCOLOR and BGCOLOR do NOT work. The BS_FLAT style does NOT completely remove the borders. With XP styles is ignored. So FLAT do NOT work. BCM_SETTEXTMARGIN is not working either. Buttons with images and with XP styles do NOT draw the focus feedback. Can NOT remove the borders when using IMPRESS. >>>> So IUP will draw its own button, but uses the Windows functions to draw text and images in native format. */ if (iupwin_comctl32ver6) dwStyle |= BS_PUSHBUTTON; /* it will be an ownerdraw because we use NM_CUSTOMDRAW */ else dwStyle |= BS_OWNERDRAW; value = iupAttribGet(ih, "IMAGE"); if (value) { ih->data->type = IUP_BUTTON_IMAGE; value = iupAttribGet(ih, "TITLE"); if (value && *value!=0) ih->data->type |= IUP_BUTTON_TEXT; } else ih->data->type = IUP_BUTTON_TEXT; if (iupAttribGetBoolean(ih, "CANFOCUS")) dwStyle |= WS_TABSTOP; if (!iupwinCreateWindow(ih, WC_BUTTON, 0, dwStyle, NULL)) return IUP_ERROR; /* Process WM_COMMAND */ IupSetCallback(ih, "_IUPWIN_COMMAND_CB", (Icallback)winButtonWmCommand); /* Process BUTTON_CB and others */ IupSetCallback(ih, "_IUPWIN_CTRLMSGPROC_CB", (Icallback)winButtonMsgProc); if (iupwin_comctl32ver6) IupSetCallback(ih, "_IUPWIN_NOTIFY_CB", (Icallback)winButtonWmNotify); /* Process WM_NOTIFY */ else IupSetCallback(ih, "_IUPWIN_DRAWITEM_CB", (Icallback)winButtonDrawItem); /* Process WM_DRAWITEM */ return IUP_NOERROR; }
static int winProgressBarMapMethod(Ihandle* ih) { DWORD dwStyle = WS_CHILD|WS_CLIPSIBLINGS; if (!ih->parent) return IUP_ERROR; if (iupStrEqualNoCase(iupAttribGetStr(ih, "ORIENTATION"), "VERTICAL")) { dwStyle |= PBS_VERTICAL; if (ih->currentheight < ih->currentwidth) { int tmp = ih->currentheight; ih->currentheight = ih->currentwidth; ih->currentwidth = tmp; } } if (!iupwin_comctl32ver6 && !iupAttribGetBoolean(ih, "DASHED")) dwStyle |= PBS_SMOOTH; if (iupwin_comctl32ver6 && iupAttribGetBoolean(ih, "MARQUEE")) { dwStyle |= PBS_MARQUEE; ih->data->marquee = 1; } if (!iupwinCreateWindow(ih, PROGRESS_CLASS, 0, dwStyle, NULL)) return IUP_ERROR; /* configure the native range */ SendMessage(ih->handle, PBM_SETRANGE, 0, MAKELPARAM(0, IUP_PB_MAX)); return IUP_NOERROR; }
static int winCalendarMapMethod(Ihandle* ih) { DWORD dwStyle = WS_CHILD | WS_CLIPSIBLINGS | MCS_NOTODAY; if (!ih->parent) return IUP_ERROR; if (iupwinIsVistaOrNew()) dwStyle |= MCS_NOSELCHANGEONNAV | MCS_SHORTDAYSOFWEEK; if (iupAttribGetBoolean(ih, "CANFOCUS")) dwStyle |= WS_TABSTOP; if (iupAttribGetBoolean(ih, "WEEKNUMBERS")) dwStyle |= MCS_WEEKNUMBERS; if (!iupwinCreateWindow(ih, MONTHCAL_CLASS, 0, dwStyle, NULL)) return IUP_ERROR; /* Process WM_NOTIFY */ IupSetCallback(ih, "_IUPWIN_NOTIFY_CB", (Icallback)winCalendarWmNotify); return IUP_NOERROR; }
static int winCanvasMapMethod(Ihandle* ih) { CLIENTCREATESTRUCT clientstruct; void *clientdata = NULL; TCHAR *classname; DWORD dwStyle = WS_CHILD|WS_CLIPSIBLINGS, dwExStyle = 0; if (!ih->parent) return IUP_ERROR; if (ih->iclass->is_interactive) { if (iupAttribGetBoolean(ih, "CANFOCUS")) dwStyle |= WS_TABSTOP; } if (ih->firstchild) /* can be a container */ iupwinGetNativeParentStyle(ih, &dwExStyle, &dwStyle); if (iupAttribGetBoolean(ih, "BORDER")) dwStyle |= WS_BORDER; ih->data->sb = iupBaseGetScrollbar(ih); if (ih->data->sb & IUP_SB_HORIZ) dwStyle |= WS_HSCROLL; if (ih->data->sb & IUP_SB_VERT) dwStyle |= WS_VSCROLL; if (iupAttribGetBoolean(ih, "MDICLIENT")) { /* creating a MDI Client that will be inside the MDI Frame, it will work as parent of all MDI children */ Ihandle *winmenu = IupGetAttributeHandle(ih, "MDIMENU"); classname = TEXT("mdiclient"); dwStyle = WS_CHILD|WS_CLIPCHILDREN|WS_VSCROLL|WS_HSCROLL|MDIS_ALLCHILDSTYLES; dwExStyle = WS_EX_CLIENTEDGE; iupAttribSet(ih, "BORDER", "NO"); iupAttribSet(IupGetDialog(ih), "MDICLIENT_HANDLE", (char*)ih); clientdata = &clientstruct; clientstruct.hWindowMenu = winmenu? winmenu->handle: NULL; /* The system increments the identifier for each additional MDI child window the application creates, and reassigns identifiers when the application destroys a window to keep the range of identifiers contiguous. */ clientstruct.idFirstChild = IUP_MDI_FIRSTCHILD; } else classname = TEXT("IupCanvas"); if (!iupwinCreateWindow(ih, classname, dwExStyle, dwStyle, clientdata)) return IUP_ERROR; IupSetCallback(ih, "_IUPWIN_CTRLMSGPROC_CB", (Icallback)winCanvasMsgProc); /* configure for DROP of files */ if (IupGetCallback(ih, "DROPFILES_CB")) iupAttribSet(ih, "DROPFILESTARGET", "YES"); winCanvasSetDXAttrib(ih, NULL); winCanvasSetDYAttrib(ih, NULL); return IUP_NOERROR; }
static int winToggleMapMethod(Ihandle* ih) { Ihandle* radio = iupRadioFindToggleParent(ih); char* value; int ownerdraw = 0; DWORD dwStyle = WS_CHILD | WS_CLIPSIBLINGS | BS_NOTIFY; /* necessary because of the base messages */ if (!ih->parent) return IUP_ERROR; if (radio) ih->data->radio = 1; value = iupAttribGet(ih, "IMAGE"); if (value) { ih->data->type = IUP_TOGGLE_IMAGE; if (!iupwin_comctl32ver6 && ih->data->flat) { dwStyle |= BS_OWNERDRAW; ownerdraw = 1; } else dwStyle |= BS_BITMAP|BS_PUSHLIKE; } else { ih->data->type = IUP_TOGGLE_TEXT; dwStyle |= BS_TEXT|BS_MULTILINE; if (iupAttribGetBoolean(ih, "RIGHTBUTTON")) dwStyle |= BS_RIGHTBUTTON; } if (iupAttribGetBoolean(ih, "CANFOCUS")) dwStyle |= WS_TABSTOP; if (radio) { if (!ownerdraw) dwStyle |= BS_RADIOBUTTON; if (!iupAttribGet(radio, "_IUPWIN_LASTTOGGLE")) { /* this is the first toggle in the radio, and then set it with VALUE=ON */ iupAttribSet(ih, "VALUE","ON"); } } else if (!ownerdraw) { if (ih->data->type == IUP_TOGGLE_TEXT && iupAttribGetBoolean(ih, "3STATE")) dwStyle |= BS_AUTO3STATE; else dwStyle |= BS_AUTOCHECKBOX; } if (!iupwinCreateWindow(ih, WC_BUTTON, 0, dwStyle, NULL)) return IUP_ERROR; /* Process WM_COMMAND */ IupSetCallback(ih, "_IUPWIN_COMMAND_CB", (Icallback)winToggleWmCommand); /* Process background color */ IupSetCallback(ih, "_IUPWIN_CTLCOLOR_CB", (Icallback)winToggleCtlColor); if (ih->data->type == IUP_TOGGLE_IMAGE) { if (iupwin_comctl32ver6) { IupSetCallback(ih, "_IUPWIN_NOTIFY_CB", (Icallback)winToggleImageWmNotify); /* Process WM_NOTIFY */ if (ih->data->flat) IupSetCallback(ih, "_IUPWIN_CTRLMSGPROC_CB", (Icallback)winToggleImageFlatMsgProc); } else { if (ih->data->flat) { iupAttribSet(ih, "FLAT_ALPHA", "NO"); IupSetCallback(ih, "_IUPWIN_DRAWITEM_CB", (Icallback)winToggleDrawItem); /* Process WM_DRAWITEM */ IupSetCallback(ih, "_IUPWIN_CTRLMSGPROC_CB", (Icallback)winToggleImageFlatMsgProc); } else { IupSetCallback(ih, "_IUPWIN_CTRLMSGPROC_CB", (Icallback)winToggleImageClassicMsgProc); iupAttribSet(ih, "_IUPWIN_ACTIVE", "YES"); } } } return IUP_NOERROR; }
static int winValMapMethod(Ihandle* ih) { DWORD dwStyle = WS_CHILD | WS_CLIPSIBLINGS | TBS_AUTOTICKS; int show_ticks; if (!ih->parent) return IUP_ERROR; /* Track bar Orientation */ if (ih->data->orientation == IVAL_HORIZONTAL) dwStyle |= TBS_HORZ; else dwStyle |= TBS_VERT; if (iupAttribGetBoolean(ih, "CANFOCUS")) dwStyle |= WS_TABSTOP; /* Track bar Ticks */ show_ticks = iupAttribGetInt(ih, "SHOWTICKS"); if (!show_ticks) { dwStyle |= TBS_NOTICKS; /* No show_ticks */ } else { char* tickspos; if (show_ticks<2) show_ticks=2; ih->data->show_ticks = show_ticks; /* non zero value, can be changed later, but not to zero */ /* Defines the position of tick marks */ tickspos = iupAttribGetStr(ih, "TICKSPOS"); if(iupStrEqualNoCase(tickspos, "BOTH")) dwStyle |= TBS_BOTH; else if(iupStrEqualNoCase(tickspos, "REVERSE")) dwStyle |= TBS_BOTTOM; /* same as TBS_RIGHT */ else /* NORMAL */ dwStyle |= TBS_TOP; /* same as TBS_LEFT */ } if (!iupwinCreateWindow(ih, TRACKBAR_CLASS, 0, dwStyle, NULL)) return IUP_ERROR; /* Process Keyboard */ IupSetCallback(ih, "_IUPWIN_CTRLMSGPROC_CB", (Icallback)winValMsgProc); /* Process Val Scroll commands */ IupSetCallback(ih, "_IUPWIN_CUSTOMSCROLL_CB", (Icallback)winValCustomScroll); /* Process background color */ IupSetCallback(ih, "_IUPWIN_CTLCOLOR_CB", (Icallback)winValCtlColor); /* configure the native range */ SendMessage(ih->handle, TBM_SETRANGEMIN, FALSE, 0); SendMessage(ih->handle, TBM_SETRANGEMAX, FALSE, SHRT_MAX); if (ih->data->inverted) SendMessage(ih->handle, TBM_SETPOS, FALSE, SHRT_MAX); /* default initial position is at MIN */ winValSetPageStepAttrib(ih, NULL); winValSetStepAttrib(ih, NULL); return IUP_NOERROR; }