projects
/
u
/
mdw
/
putty
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Alert box to support host-key checking.
[u/mdw/putty]
/
winctrls.c
diff --git
a/winctrls.c
b/winctrls.c
index
4c49f72
..
dc931c8
100644
(file)
--- a/
winctrls.c
+++ b/
winctrls.c
@@
-393,6
+393,7
@@
char *staticwrap(struct ctlpos *cp, HWND hwnd, char *text, int *lines)
SIZE size;
char *ret, *p, *q;
RECT r;
SIZE size;
char *ret, *p, *q;
RECT r;
+ HFONT oldfont, newfont;
ret = smalloc(1+strlen(text));
p = text;
ret = smalloc(1+strlen(text));
p = text;
@@
-403,18
+404,22
@@
char *staticwrap(struct ctlpos *cp, HWND hwnd, char *text, int *lines)
* Work out the width the text will need to fit in, by doing
* the same adjustment that the `statictext' function itself
* will perform.
* Work out the width the text will need to fit in, by doing
* the same adjustment that the `statictext' function itself
* will perform.
- *
- * We must first convert from dialog-box units into pixels, and
- * then from pixels into the `logical units' that Windows uses
- * within GDI. You can't make this stuff up.
*/
*/
+ SetMapMode(hdc, MM_TEXT); /* ensure logical units == pixels */
r.left = r.top = r.bottom = 0;
r.right = cp->width;
MapDialogRect(hwnd, &r);
r.left = r.top = r.bottom = 0;
r.right = cp->width;
MapDialogRect(hwnd, &r);
- width =
MulDiv(r.right, lpx, 72)
;
+ width =
r.right
;
nlines = 1;
nlines = 1;
+ /*
+ * We must select the correct font into the HDC before calling
+ * GetTextExtent*, or silly things will happen.
+ */
+ newfont = (HFONT)SendMessage(hwnd, WM_GETFONT, 0, 0);
+ oldfont = SelectObject(hdc, newfont);
+
while (*p) {
if (!GetTextExtentExPoint(hdc, p, strlen(p), width,
&nfit, pwidths, &size) ||
while (*p) {
if (!GetTextExtentExPoint(hdc, p, strlen(p), width,
&nfit, pwidths, &size) ||
@@
-453,6
+458,7
@@
char *staticwrap(struct ctlpos *cp, HWND hwnd, char *text, int *lines)
nlines++;
}
nlines++;
}
+ SelectObject(hdc, oldfont);
ReleaseDC(cp->hwnd, hdc);
if (lines) *lines = nlines;
ReleaseDC(cp->hwnd, hdc);
if (lines) *lines = nlines;
@@
-1748,6
+1754,8
@@
int winctrl_handle_command(struct dlgparam *dp, UINT msg,
RECT r = di->rcItem;
SIZE s;
RECT r = di->rcItem;
SIZE s;
+ SetMapMode(hdc, MM_TEXT); /* ensure logical units == pixels */
+
GetTextExtentPoint32(hdc, (char *)c->data,
strlen((char *)c->data), &s);
DrawEdge(hdc, &r, EDGE_ETCHED, BF_ADJUST | BF_RECT);
GetTextExtentPoint32(hdc, (char *)c->data,
strlen((char *)c->data), &s);
DrawEdge(hdc, &r, EDGE_ETCHED, BF_ADJUST | BF_RECT);