Re: Mouse movement within CStatic/Picture box
You might find this sample program interesting. It illustrates drag and
drop of objects. It doesn't draw a rectangle, but resize "dots" are put
around the object.
http://msdn2.microsoft.com/en-us/library/9t94971d(VS.80).aspx
You might also find this article interesting:
http://www.codeproject.com/shell/dragdrop.asp?df=100&forumid=2238&exp=0&select=790736
Also, one thing to note is that static controls don't display a focus
rectangle by default. You'll have to develop your own control and add a
call to:
http://msdn2.microsoft.com/en-us/library/ms534886.aspx
I've never done this sort of thing, never had to, but I think you could set
the focus rectangle in OnSetFocus() OnKillFocus().
You may want to use something besides a static (like create your own object)
for doing drag and drop type things. Hopefully, these examples help.
Tom
"MD" <madhu.datla@gmail.com> wrote in message
news:1181610949.461689.237730@r19g2000prf.googlegroups.com...
Hello,
I have a picture box, in which I need to draw a rectangle when user
makes a selection by dragging the mouse.
I am able to capture the mouse click event in the picture box(by
deriving from CStatic and handled the
ON_STN_CLICKED event from main Form).
But I am unable to understand how to capture mouse drag/ draw a
rectangle over picture box when the mouse moves. (New to MFC
programming, Pls help, any tips on how to handle OnLButtonUp,
OnMouseMove events for CStatic controls!) I really appreciate any
help.
Heres the code of what I have right now:
CpictureBox.h
------------------------------------------------------------------------------------------------------
class CPictureBox : public CStatic
{
DECLARE_DYNAMIC(CPictureBox)
public:
CPictureBox();
virtual ~CPictureBox();
void SetBitmap(CString strBitmap);
protected:
afx_msg void OnPaint();
void ShowBitmap(CPaintDC *pDC);
CString m_sBitmap;
CBitmap m_bmpBitmap;
BITMAP bm;
CRect m_Rect;
DECLARE_MESSAGE_MAP()
};
void CPictureBox::OnLButtonDown(UINT nFlags, CPoint point)
{
m_Tracking = TRUE;
SetCapture();
m_Rect.right = m_Rect.left = point.x;
m_Rect.bottom = m_Rect.top = point.y;
Invalidate();
CStatic::OnLButtonDown(nFlags, point);
}
------------------------------------------------------------------------------------------------------
CPictureBox.cpp -- These dont get the control when events are fired!
----------------------------------------------------------------------------------------------------
void CPictureBox::OnMouseMove(UINT nFlags, CPoint point)
{
if (m_Tracking)
{
m_Rect.right = point.x;
m_Rect.bottom = point.y;
Invalidate();
}
CStatic::OnMouseMove(nFlags, point);
}
----------------------------
Main Dialog.cpp--
-----------------
BEGIN_MESSAGE_MAP(CmfcThsProj1Dlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_BTN_BROWSE, OnBnClickedBtnBrowse)
ON_WM_MOUSEMOVE()
ON_STN_CLICKED(IDC_STATIC_PICBOX, OnStnClickedStaticPicbox)
END_MESSAGE_MAP()
void CmfcThsProj1Dlg::OnStnClickedStaticPicbox()
{
// TODO: Add your control notification handler code here
MessageBox("hello world");
//CPictureBox::OnLButtonUp
//m_PictureBox.Invalidate();
}
----------------------------------------------------------
-Thanks