我在dialog上放了个PICTURE用来画图,为什么画图超出static大小,图就画到dialog上去了,大家帮 忙解决一下!

解决方案 »

  1.   

    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;
    }以上是我的代码,我该如何修改,谢谢!
      

  2.   

    还有,我现在在画图时左边与顶边不会画出,只有右边与底边会画出static1,并且光标向下偏移了24
      

  3.   

    CRgn rgn;
       rgn.CreateRectRgn(rectClip.left,rectClip.top,
            rectClip.right,rectClip.bottom);
        pDC->SelectClipRgn(&rgn);]
    这个可以保证你不画到外面