2014-10-13 2 views
0

내에서 좀 컨트롤 대화 만들었다 - 헤더에서어떻게 폭을 얻을 내용 - 컨트롤의 높이를 대화 상자

IDD_DIALOG_EFFECTS DIALOGEX 0, 0, 168, 49 
STYLE DS_SETFONT | WS_CHILD 
FONT 8, "MS Sans Serif", 400, 0, 0x1 
BEGIN 
    ---   --- 
    ---   --- 
    CTEXT   "",3,200,120,60,60, WS_VISIBLE 
END 

- 파일 : kItem = 3 INT16 을 const;

이제 컨트롤의 위치와 치수를 가져 오려고 할 때 정확하지 않습니다.

// Retrieving the location and dimension of the control 
RECT wRect_proxy; 
GetWindowRect(GetDlgItem(hDlg, kItem), &wRect_proxy); 
ScreenToClient (hDlg, (LPPOINT)&wRect_proxy); 
ScreenToClient (hDlg, (LPPOINT)&(wRect_proxy.right)); 

// Output of the control as location and position that I am getting is: 
wRect_proxy.left: 300  (Expected: 200) 
wRect_proxy.top: 195  (Expected: 120) 
wRect_proxy.right: 390  (Expected: 60) 
wRect_proxy.bottom: 293  (Expected: 60) 

컨트롤의 너비 - 높이를 계산해야합니다. 도움을 청하 ...

답변

5

당신이받는 것은 콘트라의 높이입니다!

RC 파일은 대화 상자 기본 단위를 사용합니다. 대화 상자를 만들 때 특정 글꼴을 사용하여 픽셀 수가 1 DLU 인 방법을 찾습니다.

내부적으로 MapDalogRect은 RC 파일의 값을 최종 픽셀 수로 변환하는 데 사용됩니다.

CRect (0,0,4,8)에서 MapDialogrect를 사용하면 1 DLU의 기본 값을 얻을 수 있습니다.

이제 x 너비를 4로 곱하고 방금 계산 한 "너비"기본 단위로 나눕니다. y 높이의 경우 8을 곱하고 "높이"로 나눕니다.

이것은 MulDiv로 쉽게 수행 할 수 있습니다. 톤이 ...

: 당신의 지침과 제안에 따라, 조각이 될 것입니다

0

감사 :

// Summarizing the code-snippet. 
RECT wRect; 
GetWindowRect(GetDlgItem(hDlg, kDProxyItem), &wRect); 
ScreenToClient (hDlg, (LPPOINT)&wRect); 
ScreenToClient (hDlg, (LPPOINT)&(wRect.right)); 

RECT pixel_rect; 
pixel_rect.left = 0; 
pixel_rect.top = 0; 
pixel_rect.right = 4; 
pixel_rect.bottom = 8; 
bool b_check = MapDialogRect(hDlg, &pixel_rect); 

LONG base_pix_width = pixel_rect.right; 
LONG base_pix_height = pixel_rect.bottom; 

// Calculating acctual X,Y coordinates with Width - Height of the Proxy Rectangle 
RECT proxy_acc_dim; 
proxy_acc_dim.left = (wRect.left * 4/base_pix_width); 
//or we can do the same by: MulDiv(wRect.left, 4, base_pix_width); 

proxy_acc_dim.right = (wRect.right * 4/base_pix_width) - proxy_acc_dim.left; 
//or we can do the same by: MulDiv(wRect.right, 4, base_pix_width); 

proxy_acc_dim.top = (wRect.top * 8/base_pix_height); 
//or we can do the same by: MulDiv(wRect.top, 8, base_pix_height); 

proxy_acc_dim.bottom = (wRect.bottom * 8/base_pix_height) - proxy_acc_dim.top; 
//or we can do the same by: MulDiv(wRect.bottom, 8, base_pix_height); 

proxy_acc_dim.left  = proxy_rect.left; 
proxy_acc_dim.top  = proxy_rect.top; 
proxy_acc_dim.right  = proxy_rect.right - proxy_rect.left; 
proxy_acc_dim.bottom = proxy_rect.bottom - proxy_rect.top; 

그것은 잘 작동합니다. 다른 사람들에게 도움이되기를 바랍니다.