我在dialog上放了个PICTURE用来画图,为什么画图超出static大小,图就画到dialog上去了 我在dialog上放了个PICTURE用来画图,为什么画图超出static大小,图就画到dialog上去了,大家帮 忙解决一下! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 STDMETHODIMP_(BOOL) CALLBACK AboutDialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam){ //POINTS point; HWND hEdit; HDC pDC; POINT pt; COLORREF m_nCurrentColor;//图元颜色 int m_iPenWidth; //画笔宽度 m_nCurrentColor=RGB(230, 133, 26); m_iPenWidth=3; hEdit=GetDlgItem(hwndDlg,IDC_STATIC1); pDC= GetDC(hEdit);//获得DC switch (uMsg) { case WM_INITDIALOG: m_hcurCross = (HCURSOR)::LoadImage(v_hModule,MAKEINTRESOURCE(IDC_CURSOR1), IMAGE_CURSOR, 32, 32, LR_DEFAULTCOLOR); ::SetClassLong(hwndDlg, GCL_HCURSOR, (LONG)m_hcurCross);//修改缺省光标 //加载图片 //SendDlgItemMessage(hwndDlg, IDC_COMBO3, CB_ADDSTRING, 0, (LPARAM)"USER_ID"); //SendDlgItemMessage(hwndDlg, IDC_COMBO3, CB_ADDSTRING, 0, (LPARAM)"USER_ID"); break; case WM_LBUTTONDOWN: m_bDrawing=true; RECT client; GetClientRect(hEdit, &client); ClientToScreen(hEdit,(POINT*)&client);//转化为屏幕坐标 pt.x = MAKEPOINTS( lParam ).x; pt.y = MAKEPOINTS( lParam ).y-26; client.top= client.top-26; client.bottom= client.bottom+26; ::ClipCursor(&client);//锁定鼠标移动范围 m_usrCurrentObject = new CDrawCurve(m_nCurrentColor, m_iPenWidth); m_usrCurrentObject->NewPoint(pt.x, pt.y); ReleaseDC(hEdit, pDC); break; case WM_MOUSEMOVE: if(m_bDrawing) { pt.x = MAKEPOINTS( lParam ).x; pt.y = MAKEPOINTS( lParam ).y-26; m_usrCurrentObject->MoveAt(pDC, pt.x, pt.y); ReleaseDC(hEdit, pDC); } break; case WM_LBUTTONUP: ::ClipCursor(NULL);//锁定鼠标移动范围 m_usrCurrentObject->Draw(pDC); m_bDrawing = false; delete m_usrCurrentObject; m_usrCurrentObject = NULL; break; case WM_COMMAND: switch (LOWORD(wParam)) { case IDOK2: case IDC_BUTTON2: COLORREF rgColors[16]; CHOOSECOLOR cc; UINT i, uTemp; for (i=0; i<16; i++) rgColors[i]=RGB(0, 0, i*16); memset(&cc, 0, sizeof(CHOOSECOLOR)); cc.lStructSize=sizeof(CHOOSECOLOR); cc.lpCustColors=rgColors; cc.hwndOwner=hwndDlg; cc.Flags=CC_RGBINIT; //cc.rgbResult=pDoc->ColorGet(uTemp); ChooseColor(&cc); //if (ChooseColor(&cc)) // pDoc->ColorSet(uTemp, cc.rgbResult); return TRUE; case IDOK: DestroyWindow(hwndDlg); //hwndGoto = NULL; return TRUE; //EndDialog(hwndDlg, TRUE); //return TRUE; } } return FALSE;}以上是我的代码,我该如何修改,谢谢! 还有,我现在在画图时左边与顶边不会画出,只有右边与底边会画出static1,并且光标向下偏移了24 CRgn rgn; rgn.CreateRectRgn(rectClip.left,rectClip.top, rectClip.right,rectClip.bottom); pDC->SelectClipRgn(&rgn);]这个可以保证你不画到外面 MFC多线程 怎么设置工具栏后面的背景 用CBrush选个(NULL_BRUSH)的释放问题 VC中如何设置窗体的颜色 求候捷译《win32多线程程序设计》配套代码 这个问题有点难度吗?怎么没人回答? 局域网扫描程序的问题(怎样获取文件信息) 点击botton控件后,如何让其弹出一个窗口 怎样让ListCtrl中一整行都被选. 怎样使用TabCtrl控件 请教,一个关于图形按钮的问题! 请问如何定位到LIST的指定行?
{ //POINTS point;
HWND hEdit;
HDC pDC;
POINT pt;
COLORREF m_nCurrentColor;//图元颜色
int m_iPenWidth; //画笔宽度
m_nCurrentColor=RGB(230, 133, 26);
m_iPenWidth=3; hEdit=GetDlgItem(hwndDlg,IDC_STATIC1);
pDC= GetDC(hEdit);//获得DC switch (uMsg) {
case WM_INITDIALOG:
m_hcurCross = (HCURSOR)::LoadImage(v_hModule,MAKEINTRESOURCE(IDC_CURSOR1), IMAGE_CURSOR, 32, 32, LR_DEFAULTCOLOR);
::SetClassLong(hwndDlg, GCL_HCURSOR, (LONG)m_hcurCross);//修改缺省光标
//加载图片
//SendDlgItemMessage(hwndDlg, IDC_COMBO3, CB_ADDSTRING, 0, (LPARAM)"USER_ID");
//SendDlgItemMessage(hwndDlg, IDC_COMBO3, CB_ADDSTRING, 0, (LPARAM)"USER_ID");
break;
case WM_LBUTTONDOWN:
m_bDrawing=true;
RECT client; GetClientRect(hEdit, &client);
ClientToScreen(hEdit,(POINT*)&client);//转化为屏幕坐标 pt.x = MAKEPOINTS( lParam ).x;
pt.y = MAKEPOINTS( lParam ).y-26;
client.top= client.top-26;
client.bottom= client.bottom+26; ::ClipCursor(&client);//锁定鼠标移动范围
m_usrCurrentObject = new CDrawCurve(m_nCurrentColor, m_iPenWidth);
m_usrCurrentObject->NewPoint(pt.x, pt.y);
ReleaseDC(hEdit, pDC);
break;
case WM_MOUSEMOVE:
if(m_bDrawing)
{
pt.x = MAKEPOINTS( lParam ).x;
pt.y = MAKEPOINTS( lParam ).y-26;
m_usrCurrentObject->MoveAt(pDC, pt.x, pt.y);
ReleaseDC(hEdit, pDC);
}
break;
case WM_LBUTTONUP:
::ClipCursor(NULL);//锁定鼠标移动范围
m_usrCurrentObject->Draw(pDC);
m_bDrawing = false;
delete m_usrCurrentObject;
m_usrCurrentObject = NULL;
break;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDOK2:
case IDC_BUTTON2:
COLORREF rgColors[16];
CHOOSECOLOR cc;
UINT i, uTemp;
for (i=0; i<16; i++)
rgColors[i]=RGB(0, 0, i*16);
memset(&cc, 0, sizeof(CHOOSECOLOR));
cc.lStructSize=sizeof(CHOOSECOLOR);
cc.lpCustColors=rgColors;
cc.hwndOwner=hwndDlg;
cc.Flags=CC_RGBINIT;
//cc.rgbResult=pDoc->ColorGet(uTemp);
ChooseColor(&cc);
//if (ChooseColor(&cc))
// pDoc->ColorSet(uTemp, cc.rgbResult);
return TRUE;
case IDOK:
DestroyWindow(hwndDlg);
//hwndGoto = NULL;
return TRUE; //EndDialog(hwndDlg, TRUE);
//return TRUE;
}
} return FALSE;
}以上是我的代码,我该如何修改,谢谢!
rgn.CreateRectRgn(rectClip.left,rectClip.top,
rectClip.right,rectClip.bottom);
pDC->SelectClipRgn(&rgn);]
这个可以保证你不画到外面