最近在做一个图象程序,想添加标尺,苦于没有头绪,
是在OnCreate还是OnCreateClient呢?
怎么添加,消息循环会不会受到影响?
自己定义一个标尺控件,派生Cwnd类,
LRESULT CALLBACK RulerWndProc(HWND hWnd,UINT message,WPARAM
wParam,LPARAM lParam)
{
CWnd* pWnd = CWnd::FromHandlePermanent(hWnd);
if(pWnd == NULL)
{
pWnd = new CScreen;
pWnd->Attach(hWnd);
}
return ::AfxCallWndProc(pWnd,hWnd,message,wParam,lParam);
}
class CRuler : public CWnd
{
public:
static BOOL RigersterClass(HINSTANCE hInstance);
... ...
protected:
afx_msg BOOL OnEraseBkGnd(CDC* pDC);//画法
//响应法
afx_msg void OnLButtonDown(UINT nFlags,CPoint point);
afx_msg void OnMouseMove(UINT nFlags,CPoint point);
//当Windows对象释放,删除C++对象
afx_msg void PostNcDestroy();
};
BOOL CRuler::RegisterClass(HINSTASNCE hInstance)
{
WNDCLASS wc;
wc.Proc = RulerWndProc;
wc.lpClassName = "RULERWND"
... ...
if(! ::RegisterClass(&wc))
return FALSE;
return TRUE;
}
void CRulerWnd::PostNcDestroy()
{
delete this;
}
在C...App::InitInstance()中Call CRulerWnd::RegisterClass(m_hInstance)
用CFormView,在对话框模板中,用自定义控件,其设为"RULERWND"
去下一个标尺的类就是了。自己画太累
//////////////////////////////////////
参考光盘下\VC98\mfc\ole\wordpad的标尺,
就是写字板那样的!!!
其实可以干脆照抄!!
////////////////////////////////////////