获取资源文件中定义的对话框大小

我需要确定资源文件中定义的对话客户区的大小。

GetClientRect按照桌面大小剪裁devise大小。 我需要在屏幕单位devise的大小。 我发现这意味着检索对话框资源的大小,但不幸的是,它使用MFC。

我打开对话框,并有HWND和它的ID。 如何在不使用MFC的情况下以屏幕单位获取devise尺寸?

SIZE GetDialogSize(INT nResourceId, BOOL bApproximateCalcMethod = FALSE, LPCTSTR strDllName = NULL) { SIZE dlgSize = {0}; HINSTANCE hmodulee = 0; if(strDllName != NULL) hmodulee= ::LoadLibrary(strDllName); else hmodulee = ::GetmoduleeHandle(NULL); HRSRC hRsrc = ::FindResource(hmodulee, MAKEINTRESOURCE(nResourceId), RT_DIALOG); HGLOBAL hTemplate = ::LoadResource(hmodulee, hRsrc); DLGTEMPLATE* pTemplate = (DLGTEMPLATE*)::LockResource(hTemplate); if (bApproximateCalcMethod) // the approximate method of calculating { LONG dlgBaseUnits = GetDialogBaseUnits(); int baseunitX = LOWORD(dlgBaseUnits), baseunitY = HIWORD(dlgBaseUnits); dlgSize.cx = MulDiv(pTemplate->cx, baseunitX, 4); dlgSize.cy = MulDiv(pTemplate->cy, baseunitY, 8); } else // the accurate method of calculation { HWND hDlg = ::CreateDialogIndirect(0, pTemplate, NULL, DialogProc); RECT rc = {0}; ::GetWindowRect(hDlg, &rc); ::DestroyWindow(hDlg); dlgSize.cx = rc.right - rc.left; dlgSize.cy = rc.bottom - rc.top; } UnlockResource(hTemplate); ::FreeResource(hTemplate); if(strDllName != NULL) ::FreeLibrary(hmodulee); return dlgSize; }