C语言调用WIN32 API学习之6鼠标与键盘响应

前几节学习了基本控件的创建,下面学习下鼠标与键盘的响应

1,打开VC++6.0,点击 文件->打开工作空间 选择example1,点击确定,打开工程。

2,更改代码如下:

LRESULT CALLBACK WinSunProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)//回调函数定义
{
int nTextLength;
TCHAR sztextC[1024];
switch(uMsg)
{
case WM_CREATE:
button1=CreateWindow("BUTTON","第一个按键",WS_VISIBLE|WS_CHILD|WS_BORDER|BS_PUSHBUTTON,10,10,100,30,hwnd,NULL,(HINSTANCE) GetWindowLong(hwnd, GWL_HINSTANCE),NULL);//创建按键
checkBox1=CreateWindow("BUTTON","第一个复选框",WS_VISIBLE|WS_CHILD|WS_BORDER|BS_AUTOCHECKBOX,10,50,150,30,hwnd,NULL,(HINSTANCE) GetWindowLong(hwnd, GWL_HINSTANCE),NULL);//创建复选框
checkBox2=CreateWindow("BUTTON","第二个复选框",WS_VISIBLE|WS_CHILD|WS_BORDER|BS_AUTOCHECKBOX,10,100,150,30,hwnd,NULL,(HINSTANCE) GetWindowLong(hwnd, GWL_HINSTANCE),NULL);//创建复选框
radioBox1=CreateWindow("BUTTON","第一个单选框",WS_VISIBLE|WS_CHILD|WS_BORDER|BS_RADIOBUTTON,10,150,150,30,hwnd,NULL,(HINSTANCE) GetWindowLong(hwnd, GWL_HINSTANCE),NULL);//创建单选框
radioBox2=CreateWindow("BUTTON","第二个单选框",WS_VISIBLE|WS_CHILD|WS_BORDER|BS_RADIOBUTTON,10,200,150,30,hwnd,NULL,(HINSTANCE) GetWindowLong(hwnd, GWL_HINSTANCE),NULL);//创建单选框
textBox1=CreateWindow("EDIT","第一个文本框",WS_VISIBLE|WS_CHILD|WS_BORDER|ES_MULTILINE|ES_WANTRETURN,10,250,150,100,hwnd,NULL,(HINSTANCE) GetWindowLong(hwnd, GWL_HINSTANCE),NULL);//创建文本框
break;
case WM_LBUTTONDOWN:
MessageBox(NULL,"鼠标左键被按下","提示",MB_OK);//弹出提示窗体
break;
case WM_RBUTTONDOWN:
MessageBox(NULL,"鼠标右键被按下","提示",MB_OK);//弹出提示窗体
break;
case WM_LBUTTONUP:
MessageBox(NULL,"鼠标左键弹起","提示",MB_OK);//弹出提示窗体
break;
case WM_RBUTTONUP:
MessageBox(NULL,"鼠标右键弹起","提示",MB_OK);//弹出提示窗体
break;
case WM_LBUTTONDBLCLK:
MessageBox(NULL,"鼠标左键双击","提示",MB_OK);//弹出提示窗体
break;
case WM_RBUTTONDBLCLK:
MessageBox(NULL,"鼠标右键双击","提示",MB_OK);//弹出提示窗体
break;
case WM_KEYDOWN:
switch(wParam)
{
case 0x41:
MessageBox(NULL,"A被按下","提示",MB_OK);//弹出提示窗体
break;
case 0x42:
MessageBox(NULL,"B被按下","提示",MB_OK);//弹出提示窗体
break;
case 0x43:
MessageBox(NULL,"C被按下","提示",MB_OK);//弹出提示窗体
break;
case 0x44:
MessageBox(NULL,"D被按下","提示",MB_OK);//弹出提示窗体
break;
}
break;
case WM_COMMAND:
if((HWND)lParam==button1)//判断消息是否来自按键
{
nTextLength=GetWindowTextLength(textBox1);//读取edit长度
GetWindowText(textBox1,sztextC,nTextLength+1);//读取edit text
MessageBox(NULL,sztextC,"提示",MB_OK);//弹出提示窗体
}
if(((HWND)lParam) == checkBox1)
{
checkBoxValve=(int)SendMessage(checkBox1,BM_GETCHECK,0,0);
if(checkBoxValve)
MessageBox(NULL,"复选框1被选择","提示",MB_OK);//弹出提示窗体
else
MessageBox(NULL,"复选框1被取消选择","提示",MB_OK);//弹出提示窗体
}
if(((HWND)lParam) == checkBox2)
{
checkBoxValve=(int)SendMessage(checkBox2,BM_GETCHECK,0,0);
if(checkBoxValve)
MessageBox(NULL,"复选框2被选择","提示",MB_OK);//弹出提示窗体
else
MessageBox(NULL,"复选框2被取消选择","提示",MB_OK);//弹出提示窗体
}
if(((HWND)lParam) == radioBox1)
{
SendMessage(radioBox1,BM_SETCHECK,1,0);
SendMessage(radioBox2,BM_SETCHECK,0,0);
MessageBox(NULL,"单选框1被选择","提示",MB_OK);//弹出提示窗体

}
if(((HWND)lParam) == radioBox2)
{
SendMessage(radioBox1,BM_SETCHECK,0,0);
SendMessage(radioBox2,BM_SETCHECK,1,0);
MessageBox(NULL,"单选框2被选择","提示",MB_OK);//弹出提示窗体
}

break;
case WM_DESTROY://关闭窗口是系统发送的消息
PostQuitMessage(0);//发送退出消息GetMessage收到消息后将return 0,主函数退出消息循环
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);//不处理的消息交给系统处理。
}
return 0;
}

 

posted on 2017-04-27 15:26  _雪狼  阅读(2441)  评论(0编辑  收藏  举报