⑴ MFC編程中怎麼找到工具箱
VC6.0還是高級版本?
工具箱只有你打開資源後才能看到的
如果還是沒有的話
對於VC6.0來說,Tools-Customize-ToolBars,把Controls前面的復選框選中就OK了
⑵ vs2013中用MFC和C++創建程序後,工具箱中的控制項全部顯示灰色,無法拖進對話框。
我碰到過一次,具體是因為我在使用控制項的時候正在運行一個程序,這樣,vs你再向這個工程里添加東西是不可以的!我的就是因為這個,希望,能解決你的問題。
⑶ mfc中如何實現 滑鼠拖拽圖片
這個效果我剛好做過,呵呵!
首先,在View類中重載滑鼠Down,Move,Up消息函數,這個沒問題吧!
滑鼠按下函數代碼如下:
void CMy2009302590235liliView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CMy2009302590235liliDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
LPSTR lpDIB=(LPSTR)::GlobalLock(pDoc->hDIB);
LPSTR lpDIBBits;
lpDIBBits=FindDIBBits(lpDIB);
LONG Width=DIBWidth(lpDIB);
LONG Height=DIBHeight(lpDIB);//這三句是為了獲得圖像的高和寬,這個你可以用你自己的方法獲得。
CRect rectPic;
ptput=point;
rectPic.left=0;
rectPic.right=Width;
rectPic.top=0;
rectPic.bottom=Height;
if(rectPic.PtInRect(ptput))
{
SetCapture();
}//以上的步驟是為了判斷你滑鼠點下的地方是否在圖片區域內。這個我相信你應該看得懂
CScrollView::OnLButtonDown(nFlags, point);
}
滑鼠移動,重點在這里
void CMy2009302590235liliView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CScrollView::OnMouseMove(nFlags, point);
if(GetCapture())//這個if是為了判斷滑鼠是否在圖像區域內,在的話執行下面的代碼
{
CMy2009302590235liliDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);//這兩行是為了獲得指針pDoc,這個因該不陌生
LPSTR lpDIB=(LPSTR)::GlobalLock(pDoc->hDIB);//鎖定圖像
LPSTR lpDIBBits;
lpDIBBits=FindDIBBits(lpDIB);
LONG Width=DIBWidth(lpDIB);
LONG Height=DIBHeight(lpDIB);//以上是為了獲得圖像的高和寬
DWORD m_dwsizeImage=Width*Height;//計算大小
LPBYTE m_lpImageCopy=(BYTE*)malloc(m_dwsizeImage);//分配內存
memcpy(m_lpImageCopy,lpDIBBits,m_dwsizeImage);
DWORD wBitCount = ((LPBITMAPINFOHEADER)lpDIB)->biBitCount;//這個是獲得每一個像素所佔用的位元組
DWORD lRowBytes=WIDTHBYTES(Width*wBitCount);
LPBYTE lpData=(LPBYTE)lpDIBBits;
LPBYTE lpOldBits=m_lpImageCopy;
CPoint m_ptmove=point;
//以下是具體演算法,不做過多解釋,可以直接復制粘貼
DWORD dXOffset;
DWORD dYOffset;
dXOffset=m_ptmove.x-ptput.x;
dYOffset=m_ptmove.y-ptput.y;
ptput=m_ptmove;
DWORD i;
DWORD j;
long i0=0;
long j0=0;
for(i=0;i<Height;i++)
{
for(j=0;j<Width;j++)
{
LPBYTE lpTemp=lpData+lRowBytes*(i)+(j);
i0=i+dYOffset;
j0=j-dXOffset;
if((j0>=0)&&(j0<(long)Width)&&(i0>=0)&&(i0<(long)Height))
{
*lpTemp=*(lpOldBits+lRowBytes*(i0)+(j0));
}
else
{
*lpTemp=(BYTE)255;
}
}
}
}
}
滑鼠UP,這里簡單的多,只要釋放以下滑鼠就可以了。
void CMy2009302590235liliView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CScrollView::OnLButtonUp(nFlags, point);
Invalidate(FALSE);
ReleaseCapture();
}
⑷ MFC中如何能讓工具欄不被拖拽
自己寫個類吧