怎样用VC++的MFC画矩形?

要求:编写相应的消息函数代码实现在客户区画矩形的功能,按下鼠标左键确定第一个矩形对角点位置,按住鼠标并拖动鼠标到另一位置时,释放左键确定另一个对角点。描述编程主要过程并写... 要求:编写相应的消息函数代码实现在客户区画矩形的功能,按下鼠标左键确定第一个矩形对角点位置,按住鼠标并拖动鼠标到另一位置时,释放左键确定另一个对角点。描述编程主要过程并写出主要代码。

很急!!谢谢!!
正确答案有追加分数!!
我需要详细的源代码!~谢谢!
展开
 我来答
sun1yu1jia1
2015-07-15 · TA获得超过1066个赞
知道小有建树答主
回答量:1178
采纳率:62%
帮助的人:532万
展开全部

相应WM_PAINT消息,然后在里面加入绘制矩形的代码。

例如:

CClientDC dc(this);//选定当前画图环境
CPen pen(PS_SOLID,1,#ff0000);//做一支红色粗细为1的笔
dc.SelectObject(&pen);//将pen放到dc上
dc.Rectangle(100,100,200,200);//画一个矩形

参考资料:

http://blog.csdn.net/zyq11223/article/details/8271006

yunxian_19
2015-07-07 · TA获得超过317个赞
知道小有建树答主
回答量:218
采纳率:0%
帮助的人:187万
展开全部

我不使用mfc,所以给你做了个Win32 C程序的例子,把这个理解了,mfc就是小儿科,

找个文档查询下对应的mfc类就可以完成你的目标了。


#include <windows.h>


LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 

                  PSTR szCmdLine, int iCmdShow) {

  

  static TCHAR szAppName[] = TEXT("Rectangle");

  HWND hWnd;

  MSG msg;

  WNDCLASS wndClass;


  wndClass.style = CS_HREDRAW | CS_VREDRAW;

  wndClass.lpfnWndProc = WndProc;

  wndClass.cbClsExtra = 0;

  wndClass.cbWndExtra = 0;

  wndClass.hInstance = hInstance;

  wndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);

  wndClass.hCursor = LoadCursor(NULL, IDC_ARROW);

  wndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);

  wndClass.lpszMenuName = NULL;

  wndClass.lpszClassName = szAppName;


  if (!RegisterClass(&wndClass)) {

    MessageBox(NULL, TEXT("This Program requires Windows NT!"), szAppName, MB_ICONERROR);

    return 0;

  }


  hWnd = CreateWindow (szAppName, TEXT("Device Capabilities"), 

                      WS_OVERLAPPEDWINDOW,

                      CW_USEDEFAULT, CW_USEDEFAULT,

                      CW_USEDEFAULT, CW_USEDEFAULT,

                      NULL, NULL, hInstance, NULL); 


  ShowWindow(hWnd, iCmdShow);

  UpdateWindow(hWnd);


  while (GetMessage(&msg, NULL, 0, 0)) {

    TranslateMessage(&msg);

    DispatchMessage(&msg);

  }


  return msg.wParam;

}


LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {

  

  static int cxChar, cyChar, cxCaps;

  TCHAR szBuffer[10];

  HDC hdc;

  int i;

  PAINTSTRUCT ps;


  switch (message) {

  

    return 0;

  case WM_PAINT:

    hdc = BeginPaint(hWnd, &ps);

    Rectangle(hdc, 10, 10, 50, 200);//


    EndPaint(hWnd, &ps);

    return 0;


  case WM_DESTROY:

    PostQuitMessage(0);

    return 0;

  }


  return DefWindowProc(hWnd, message, wParam, lParam);

}


效果图:


已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友c6c78e9
2008-07-01 · TA获得超过2283个赞
知道小有建树答主
回答量:620
采纳率:0%
帮助的人:998万
展开全部
只需要响应两个消息:WM_LBUTTONDOWN,和WM_LBUTTONUP即可。下面是实现的代码,其中,m_OrigPoint是我在CMFCView类中添加的CPoint类型的成员变量。

//WM_LBUTTONDOWN消息响应函数
void CMFCView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
this->m_OrigPoint=point;

CView::OnLButtonDown(nFlags, point);
}

//WM_LBUTTONUP消息响应函数
void CMFCView::OnLButtonUp(UINT nFlags, CPoint point)
{
CClientDC dc(this);
dc.Rectangle(CRect(m_OrigPoint,point));

CView::OnLButtonUp(nFlags, point);
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
归悦欣cf
2015-05-20 · TA获得超过1444个赞
知道大有可为答主
回答量:4250
采纳率:59%
帮助的人:1328万
展开全部
使用橡皮筋类获取画矩形的区域,然后该局此区域4个角坐标连线成一个矩形。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
风轻云度
2008-07-01 · TA获得超过1423个赞
知道大有可为答主
回答量:1835
采纳率:0%
帮助的人:0
展开全部
1、在OnLButtonDown消息记住坐标point,并设置状态为按下。
2、在OnMouseMove里来判断按下状态并调用CDC的方法Rectangle来画矩形。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式