VC++6.0鼠标响应程序求解

这是我写的代码,没有错误可是得不到预期的效果,请帮忙修改一下。原问题:设计一个鼠标程序,在按下Ctrl键的同事按下鼠标左键,在窗口中拖动鼠标,可以画出一个圆;在按下shi... 这是我写的代码,没有错误可是得不到预期的效果,请帮忙修改一下。
原问题:设计一个鼠标程序,在按下Ctrl键的同事按下鼠标左键,在窗口中拖动鼠标,可以画出一个圆;在按下shift键 同时按下鼠标左键,在窗口中拖动,画出一个矩形。(按下shift不用写)。
代码:(运行环境VC6.0 工程Window32 Application)
#include<windows.h>
#include<stdlib.h>
#include<string.h>
BOOL InitWindowsClass(HINSTANCE hInstance);
BOOL InitWindows(HINSTANCE hInstance,int nCmdShow);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
MSG Message;
if(!InitWindowsClass(hInstance))
return FALSE;
if(!InitWindows(hInstance,nCmdShow))
return FALSE;
while(GetMessage(&Message,0,0,0)) //消息循环
{
TranslateMessage(&Message);
DispatchMessage(&Message);
}
return Message.wParam;
}

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam)
{
WORD x,y,x1,y1; //定义表示坐标的变量
HDC hDC; //定义表示鼠标的变量
HBRUSH hBrush;
PAINTSTRUCT PtStr;
switch(iMessage) //消息处理
{
case WM_LBUTTONDOWN:
x=LOWORD(lParam);
y=HIWORD(lParam);
if(wParam&MK_CONTROL)//如果Ctrl键被按下
{
switch(wParam)
{
case WM_LBUTTONUP:
x1=LOWORD(lParam);
y1=HIWORD(lParam);
case WM_PAINT:
hDC=BeginPaint(hWnd,&PtStr);
SetMapMode(hDC,MM_TEXT);
hBrush=(HBRUSH)GetStockObject(DKGRAY_BRUSH);
SelectObject(hDC,hBrush);
Ellipse(hDC,x,y,x1,y1);
case WM_DESTROY:
PostQuitMessage(0);
return 0;
default:
return (DefWindowProc(hWnd,iMessage,wParam,lParam));
}
}

case WM_DESTROY: //处理结束应用程序消息
PostQuitMessage(0); //结束应用程序
return 0;
default://其他消息处理程序
return(DefWindowProc(hWnd,iMessage,wParam,lParam)) ;

}
}

BOOL InitWindowsClass(HINSTANCE hInstance) //初始化窗口类
{
WNDCLASS WndClass;
WndClass.cbClsExtra=0;
WndClass.cbWndExtra=0;
WndClass.hbrBackground=(HBRUSH)(GetStockObject(WHITE_BRUSH));
WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
WndClass.hIcon=LoadIcon(NULL,"END");
WndClass.hInstance=hInstance;
WndClass.lpfnWndProc=WndProc;
WndClass.lpszClassName="WinMouse";
WndClass.lpszMenuName=NULL;
WndClass.style=CS_HREDRAW|CS_VREDRAW;
return RegisterClass(&WndClass);
}

BOOL InitWindows(HINSTANCE hInstance,int nCmdShow) //初始化窗口
{
HWND hWnd;
hWnd=CreateWindow("WinMouse", //生成窗口
"Ctrl+鼠标左键=圆;Shift+鼠标左键=矩形",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
0,
CW_USEDEFAULT,
0,
NULL,
NULL,
hInstance,
NULL);
if(!hWnd)
return FALSE;
ShowWindow(hWnd,nCmdShow); //显示窗口
UpdateWindow(hWnd);
return TRUE;
}
(刚开始学VC,感觉不好学啊,这个适应时间要多长呢?只能求助各位大高人指点了,在此先谢谢)
可不是么!这么重要的我都忽视了,可是修改后还是没有结果。请帮忙在仔细看看。
展开
 我来答
皇家救星1985
2007-11-05 · TA获得超过1131个赞
知道大有可为答主
回答量:1579
采纳率:0%
帮助的人:1651万
展开全部
case WM_LBUTTONDOWN:
后面少了break

所以只要有鼠标按键程序就会退出
-----------------------------------------
static flag = false;
case WM_LBUTTONDOWN:
x=LOWORD(lParam);
y=HIWORD(lParam);
if(wParam&MK_CONTROL)//如果Ctrl键被按下
{
flag = true;
}
return 0;
case WM_LBUTTONUP:
if(flag)
{;
_RPT0(_CRT_WARN, "error\n");
x1=LOWORD(lParam);
y1=HIWORD(lParam);

//anflag = true;
//SendMessage(hWnd, WM_PAINT, 0, 0);
flag = false;
_RPT0(_CRT_WARN, "another error\n");

hDC= GetDC (hWnd) ;
SetMapMode(hDC,MM_TEXT);
hBrush=(HBRUSH)GetStockObject(DKGRAY_BRUSH);
SelectObject(hDC,hBrush);
Ellipse(hDC,x,y,x1,y1);
DeleteObject(hBrush);
ReleaseDC(hWnd, hDC);

}
return 0;
--------------------------------------------

这样修改一下就行了
你的程序switch(iMessage) //消息处理
没有意义的
123553628
2007-11-05 · TA获得超过6483个赞
知道小有建树答主
回答量:621
采纳率:0%
帮助的人:513万
展开全部
case WM_LBUTTONDOWN: 没有break能不过吗?

所以只要按鼠标 就退出了

犯了新手的问题`````
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式