Hi,
In prop_sheet_proc you wrote: case PSN_APPLY: FIXME("(%p, %s, %s)\n", hwnd, "WM_NOTIFY", "PSN_APPLY"); IPropertyPage_Apply(opf->propPage); return TRUE; If I understand it correctly applying changes is fully implemented. Why there's a FIXME? Probably you wanted to use TRACE here. default: FIXME("(%p, %d, %ld, %p)\n", hwnd, msg, wparam, (void *)lparam); There's lots of messages that your're not going to handle (e.g. WM_SETCURSOR) so this FIXME will be very loud.
In pixels_to_dialog_units function: You're using some hardcoded values here. Probably something like this would be better, but I'm not sure if it's correct: static void pixels_to_dialog_units(short *x_pixels, short *y_pixels) { int basey; float basex; HFONT font = GetStockObject(DEFAULT_GUI_FONT); HDC hdc = GetDC(NULL); TEXTMETRICW tm; SIZE size;
font = SelectObject(hdc, font); GetTextMetricsW(hdc, &tm); GetTextExtentPoint32A(hdc, "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz", 52, &size); SelectObject(hdc, font);
basex = ((float)size.cx/26+1)/2; basey = tm.tmHeight;
*x_pixels = (float)(*x_pixels)*4/basex; *y_pixels = MulDiv(*y_pixels, 8, basey); } Of course the basex and basey values should be computed once.
In OleCreatePropertyFrameIndirect it's probably good to add a FIXME, that dispidInitialProperty value is ignored.
Please try to use the same formatting in whole file (e.g. you sometimes use white chars before brackets).
Cheers, Piotr