用滑鼠來動態改變一個控制元件的大小位置 比如要改變對話框內的一個按鈕的大小和位置
派生一個按鈕類CMyButton,回應WM_NCHITTEST訊息
LRESULT CMyButton::OnNcHitTest(CPoint point)
{
。。。。。。
if (!rect.PtInRect(pt))
{
if (pt.x <= nFrame && pt.y >= rect.bottom - nFrame)
{
return HTBOTTOMLEFT;
}
else if (pt.x <= nFrame && pt.y <= nFrame)
{
return HTTOPLEFT;
}
else if (pt.x >= rect.right - nFrame && pt.y <= nFrame)
{
return HTTOPRIGHT;
}
else if (pt.x >= rect.right - nFrame && pt.y >= rect.bottom - nFrame)
{
return HTBOTTOMRIGHT;
}
else if (pt.x <= nFrame)
{
return HTLEFT;
}
else if (pt.y <= nFrame)
{
return HTTOP;
}
else if (pt.y >= rect.bottom - nFrame)
{
return HTBOTTOM;
}
else if (pt.x >= rect.right - nFrame)
{
return HTRIGHT;
}
}
else
{
return HTCAPTION;
}
}
這個辦法對按鈕控制元件有效,對listbox控制元件有效,都能改變位置和大小
對picture控制元件一點效果也沒有,既不能改變位置,也不能改變大小,請論壇高人幫忙指出原因
或者能提供其他方法能用滑鼠改變picture控制元件的位置和大小
uj5u.com熱心網友回復:
picture控制元件 是 CStatic 打開 Notify 屬性uj5u.com熱心網友回復:
勾上了Notify屬性,還是不能移動不能調整大小uj5u.com熱心網友回復:
void CMyStatic1::OnMouseMove(UINT nFlags, CPoint point){
// TODO: Add your message handler code here and/or call default
static CPoint ptLast;
if(MK_LBUTTON==nFlags)
{
CRect rc;
GetWindowRect(&rc);
ScreenToClient(&rc);
MapWindowPoints(GetParent(),&rc);
MoveWindow(rc.left+(point.x-ptLast.x), rc.top+(point.y-ptLast.y), rc.Width(), rc.Height());
}
else
{
ptLast=point;
CStatic::OnMouseMove(nFlags, point);
}
Invalidate();
//
// CStatic::OnMouseMove(nFlags, point);
}
uj5u.com熱心網友回復:
要改變大小 用 CRectTracker 如:class CMyButton : public CButton,public CRectTracker
uj5u.com熱心網友回復:
是不是還要把邊框樣式選上?另外注意,是要從CStatic派生子類
還有picture控制元件有修改它的ID并映射到派生出來的子類上吧?
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/82906.html
標籤:界面
