void iupDrawText(IdrawCanvas* dc, const char* text, int len, int x, int y, unsigned char r, unsigned char g, unsigned char b, const char* font) { int num_line; HFONT hOldFont, hFont = (HFONT)iupwinGetHFont(font); SetTextColor(dc->hBitmapDC, RGB(r, g, b)); hOldFont = SelectObject(dc->hBitmapDC, hFont); num_line = iupStrLineCount(text); if (num_line == 1) { TCHAR* wtext = iupwinStrToSystemLen(text, &len); TextOut(dc->hBitmapDC, x, y, wtext, len); } else { int i, line_height, len; const char *p, *q; TCHAR* wtext; TEXTMETRIC tm; GetTextMetrics(dc->hBitmapDC, &tm); line_height = tm.tmHeight; p = text; for (i = 0; i < num_line; i++) { q = strchr(p, '\n'); if (q) len = (int)(q - p); /* Cut the string to contain only one line */ else len = (int)strlen(p); /* use the remaining characters */ /* Draw the line */ wtext = iupwinStrToSystemLen(p, &len); TextOut(dc->hBitmapDC, x, y, wtext, len); /* Advance the string */ if (q) p = q + 1; /* Advance a line */ y += line_height; } } SelectObject(dc->hBitmapDC, hOldFont); }
void iupwinTipsUpdateInfo(Ihandle* ih, HWND tips_hwnd) { COLORREF color, tip_color; char* value; { HFONT hfont; value = iupAttribGetStr(ih, "TIPFONT"); if (value) { if (iupStrEqualNoCase(value, "SYSTEM")) hfont = NULL; else hfont = iupwinGetHFont(value); } else hfont = (HFONT)iupwinGetHFontAttrib(ih); if (hfont) { HFONT tip_hfont = (HFONT)SendMessage(tips_hwnd, WM_GETFONT, 0, 0); if (tip_hfont != hfont) SendMessage(tips_hwnd, WM_SETFONT, (WPARAM)hfont, MAKELPARAM(TRUE,0)); } } iupwinGetColorRef(ih, "TIPBGCOLOR", &color); tip_color = (COLORREF)SendMessage(tips_hwnd, TTM_GETTIPBKCOLOR, 0, 0); if (color != tip_color) SendMessage(tips_hwnd, TTM_SETTIPBKCOLOR, (WPARAM)color, 0); iupwinGetColorRef(ih, "TIPFGCOLOR", &color); tip_color = (COLORREF)SendMessage(tips_hwnd, TTM_GETTIPTEXTCOLOR, 0, 0); if (color != tip_color) SendMessage(tips_hwnd, TTM_SETTIPTEXTCOLOR, (WPARAM)color, 0); { int balloon = IupGetInt(ih, "TIPBALLOON"); /* must use IupGetInt to use inheritance */ DWORD style = GetWindowLong(tips_hwnd, GWL_STYLE); int tip_balloon = style & TTS_BALLOON? 1: 0; if (tip_balloon != balloon) { if (balloon) style |= TTS_BALLOON; else style &= ~TTS_BALLOON; SetWindowLong(tips_hwnd, GWL_STYLE, style); } if (balloon) { int balloon_icon = IupGetInt(ih, "TIPBALLOONTITLEICON"); /* must use IupGetInt to use inheritance */ TCHAR* balloon_title = iupwinStrToSystem(IupGetAttribute(ih, "TIPBALLOONTITLE")); /* must use IupGetAttribute to use inheritance */ SendMessage(tips_hwnd, TTM_SETTITLE, balloon_icon, (LPARAM)balloon_title); } else SendMessage(tips_hwnd, TTM_SETTITLE, 0, 0); } { int delay = IupGetInt(ih, "TIPDELAY"); /* must use IupGetInt to use inheritance */ int tip_delay = (int)SendMessage(tips_hwnd, TTM_GETDELAYTIME, TTDT_AUTOPOP, 0); if (delay != tip_delay) SendMessage(tips_hwnd, TTM_SETDELAYTIME, TTDT_AUTOPOP, (LPARAM)MAKELONG(delay, 0)); } { TTTOOLINFO ti; ZeroMemory(&ti, sizeof(TTTOOLINFO)); if (iupwin_comctl32ver6) ti.cbSize = sizeof(TTTOOLINFO); else ti.cbSize = sizeof(TTTOOLINFO)-sizeof(void*); /* fix for no visual styles and Unicode */ ti.uId = 0; ti.hwnd = ih->handle; value = iupAttribGet(ih, "TIPRECT"); if (value) { int x1, x2, y1, y2; sscanf(value, "%d %d %d %d", &x1, &y1, &x2, &y2); ti.rect.left = x1; ti.rect.right = x2; ti.rect.top = y1; ti.rect.bottom = y2; } else GetClientRect(ih->handle, &ti.rect); SendMessage(tips_hwnd, TTM_NEWTOOLRECT, 0, (LPARAM)&ti); } }
void iupwinTipsGetDispInfo(LPARAM lp) { COLORREF color, tip_color; NMTTDISPINFO* tips_info; Ihandle* ih; HWND tips_hwnd; char* value; if (!lp) return; tips_info = (NMTTDISPINFO*)lp; ih = iupwinHandleGet(tips_info->hdr.hwndFrom); /* hwndFrom is the tooltip window */ if (!ih) return; tips_hwnd = (HWND)iupAttribGet(ih, "_IUPWIN_TIPSWIN"); if (tips_hwnd != tips_info->hdr.hwndFrom) return; tips_info->hinst = NULL; tips_info->lpszText = IupGetAttribute(ih, "TIP"); /* must use IupGetAttribute to use inheritance */ { HFONT hfont; value = iupAttribGetStr(ih, "TIPFONT"); if (value) { if (iupStrEqualNoCase(value, "SYSTEM")) hfont = NULL; else hfont = iupwinGetHFont(value); } else hfont = (HFONT)iupwinGetHFontAttrib(ih); if (hfont) { HFONT tip_hfont = (HFONT)SendMessage(tips_hwnd, WM_GETFONT, 0, 0); if (tip_hfont != hfont) SendMessage(tips_hwnd, WM_SETFONT, (WPARAM)hfont, MAKELPARAM(TRUE,0)); } } iupwinGetColorRef(ih, "TIPBGCOLOR", &color); tip_color = (COLORREF)SendMessage(tips_hwnd, TTM_GETTIPBKCOLOR, 0, 0); if (color != tip_color) SendMessage(tips_hwnd, TTM_SETTIPBKCOLOR, (WPARAM)color, 0); iupwinGetColorRef(ih, "TIPFGCOLOR", &color); tip_color = (COLORREF)SendMessage(tips_hwnd, TTM_GETTIPTEXTCOLOR, 0, 0); if (color != tip_color) SendMessage(tips_hwnd, TTM_SETTIPTEXTCOLOR, (WPARAM)color, 0); { int ballon = IupGetInt(ih, "TIPBALLON"); /* must use IupGetInt to use inheritance */ DWORD style = GetWindowLong(tips_hwnd, GWL_STYLE); int tip_ballon = style & TTS_BALLOON? 1: 0; if (tip_ballon != ballon) { if (ballon) style |= TTS_BALLOON; else style &= ~TTS_BALLOON; SetWindowLong(tips_hwnd, GWL_STYLE, style); } if (ballon) { char* ballon_title = IupGetAttribute(ih, "TIPBALLONTITLE"); /* must use IupGetAttribute to use inheritance */ int ballon_icon = IupGetInt(ih, "TIPBALLONTITLEICON"); /* must use IupGetInt to use inheritance */ SendMessage(tips_hwnd, TTM_SETTITLEA, ballon_icon, (LPARAM)ballon_title); } else SendMessage(tips_hwnd, TTM_SETTITLEA, 0, 0); } { int delay = IupGetInt(ih, "TIPDELAY"); /* must use IupGetInt to use inheritance */ int tip_delay = SendMessage(tips_hwnd, TTM_GETDELAYTIME, TTDT_AUTOPOP, 0); if (delay != tip_delay) SendMessage(tips_hwnd, TTM_SETDELAYTIME, TTDT_AUTOPOP, (LPARAM)MAKELONG(delay, 0)); } { TOOLINFO ti; ZeroMemory(&ti, sizeof(TOOLINFO)); ti.cbSize = sizeof(TOOLINFO); ti.uId = 0; ti.hwnd = ih->handle; value = iupAttribGet(ih, "TIPRECT"); if (value) { int x1, x2, y1, y2; sscanf(value, "%d %d %d %d", &x1, &y1, &x2, &y2); ti.rect.left = x1; ti.rect.right = x2; ti.rect.top = y1; ti.rect.bottom = y2; } else GetClientRect(ih->handle, &ti.rect); SendMessage(tips_hwnd, TTM_NEWTOOLRECT, 0, (LPARAM)&ti); } }