CWnd::GetClientRect Fonksiyonu
Bilindiği gibi GetClientRect API fonksiyonu RECT türünden bir yapının adresini alarak çalışma alanının koordinatlarını bu yapıya yerleştirir. Bu fonksiyonla alınan koordinatların sol üst köşesi her zaman (0, 0) biçimindedir. CWnd::GetClientRect fonksiyonu da bu API fonksiyonunu çağırarak işlemini yapar.
void CWnd::GetClientRect(LPRECT lpRect) const;
Pencerenin çalışma alanının koordinatlarını CRect türünden bir sınıf içerisine çekip bu sınıfın üye fonksiyonlarıyla hızlı bir biçimde koordinat dönüşümü yapabiliriz. Örneğin:
CRect rect;
GetClientRect(rect);
rect.InflateRect(-100, -100);
edit.Create(….., rect, …..);
//0,0,100,100 koordinatları içine mousla tıklandığında, mous koordinatlarını
// mesajbox ile gösteren program
//lbuttondown.h
#ifndef _LBUTTON_H_
#define _LBUTTON_H_
class CGenericApp : public CWinApp {
public:
virtual BOOL InitInstance(void);
};
class CMainWnd : public CFrameWnd {
public:
CMainWnd(void);
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
DECLARE_MESSAGE_MAP()
};
#endif // Multiple include checker!
//lbuttondown.cpp
#include
#include “lbutton.h”
CGenericApp theApp;
BOOL CGenericApp::InitInstance(void)
{
m_pMainWnd = new CMainWnd();
m_pMainWnd->ShowWindow(m_nCmdShow);
m_pMainWnd->UpdateWindow();
return TRUE;
}
CMainWnd::CMainWnd(void)
{
Create(NULL, “LButton Uygulamasi”);
}
void CMainWnd::OnLButtonDown(UINT nFlags, CPoint point)
{
CRect rect(0, 0, 100, 100);
char buf[100];
if (rect.PtInRect(point)) {
sprintf(buf, “x = %d\ty = %d”, point.x, point.y);
MessageBox(buf);
}
}
BEGIN_MESSAGE_MAP(CMainWnd, CFrameWnd)
ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()
