首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

或者按键值和鼠标值的程序,跪求阿

2012-03-30 
求一个或者按键值和鼠标值的程序,跪求阿!小弟有个疑问阿,是不是当你按下某个按键的时候调用某个函数就可以

求一个或者按键值和鼠标值的程序,跪求阿!
小弟有个疑问阿,是不是当你按下某个按键的时候 调用某个函数就可以或者这个按键的值阿,还有鼠标的。。用 int 型表示的。。。求简短的代码,跪求了!

[解决办法]
键盘中每个按键都值都是固定的,当你按下某个键时会产生一个按键消息


#include "stdafx.h"
#include "windows.h"
#include "stdio.h"
HINSTANCE g_hInstance=0;

#define WM_MYMESSAGE WM_USER+1
HANDLE g_hOutput=0;
int g_xPos=20;
int g_yPos=20;
void OnPaint(HWND hWnd){
//WriteConsole(g_hOutput,"WM_PAINT\n",strlen("WM_PAINT\n"),NULL,NULL);
PAINTSTRUCT lPa={0};
LPSTR pszText="hello 你好 Paint!";
HDC hDc=BeginPaint(hWnd,&lPa);
TextOut(hDc,g_xPos,g_yPos,pszText,strlen(pszText));
EndPaint(hWnd,&lPa);
}
void OnKeyDown(HWND hWnd,WPARAM wParam,LPARAM lParam){
CHAR szText[256]={0};
sprintf(szText,"WM_KEYDOWN: %08X\n",wParam);
WriteConsole(g_hOutput,szText,strlen(szText),NULL,NULL);
switch(wParam){
case VK_UP:
KillTimer(hWnd,1);
g_yPos-=20;
InvalidateRect(hWnd,NULL,true);
break;
case VK_DOWN:
g_yPos+=20;
InvalidateRect(hWnd,NULL,true);
break;
case VK_LEFT:
g_xPos-=20;
InvalidateRect(hWnd,NULL,true);
break;
case VK_RIGHT:
g_xPos+=20;
InvalidateRect(hWnd,NULL,true);
break;
}

}
void OnKeyUp(HWND hWnd,WPARAM wParam,LPARAM lParam){
CHAR szText[256]={0};
sprintf(szText,"WM_KEYUP:%08X\n",wParam);
WriteConsole(g_hOutput,szText,strlen(szText),NULL,NULL);

}
void OnChar(HWND hWnd,WPARAM wParam,LPARAM lParam){
CHAR szText[256]={0};
sprintf(szText,"WM_CHAR:%08X\n",wParam);
WriteConsole(g_hOutput,szText,strlen(szText),NULL,NULL);
}
VOID CALLBACK TimerProc(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime){
CHAR szText[256]={0};
sprintf(szText,"WM_TIMER:%d\n",idEvent);
WriteConsole(g_hOutput,szText,strlen(szText),NULL,NULL);
}
void OnTimer(HWND hWnd,WPARAM wParam,LPARAM lParam){
CHAR szText[256]={0};
sprintf(szText,"WM_TIMER:%d\n",wParam);
WriteConsole(g_hOutput,szText,strlen(szText),NULL,NULL);
}
LRESULT CALLBACK WinProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam){
switch (uMsg){
case WM_CREATE://WM_CREATE此消息是非队列消息,直接调用窗口处理函数,消息由系统直接派发
//PostMessage(hWnd,WM_MYMESSAGE,0,0);
//SendMessage(hWnd,WM_MYMESSAGE,0,0);
SetTimer(hWnd,1,1000,TimerProc);
SetTimer(hWnd,2,2000,NULL);
break;
case WM_MYMESSAGE:
MessageBox(NULL,"WM_MESSAGE","TITLE",MB_OK);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_PAINT:
OnPaint(hWnd);
break;
case WM_KEYDOWN:
OnKeyDown(hWnd,wParam,lParam);
break;
case WM_KEYUP:
OnKeyUp(hWnd,wParam,lParam);
break;
case WM_CHAR:
OnChar(hWnd,wParam,lParam);
break;
case WM_TIMER:
OnTimer(hWnd,wParam,lParam);
break;
}
return DefWindowProc(hWnd,uMsg,wParam,lParam);
}
BOOL Register(WNDPROC wndProc,LPSTR pszClassName){
WNDCLASSEX wce={0};
wce.cbClsExtra=0;
wce.cbWndExtra=0;
wce.cbSize=sizeof(wce);
wce.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
wce.hCursor=NULL;
wce.hIcon=NULL;
wce.hIconSm=NULL;
wce.hInstance=g_hInstance;
wce.lpfnWndProc=wndProc;
wce.lpszMenuName=NULL;
wce.lpszClassName=pszClassName;
wce.style=CS_HREDRAW|CS_VREDRAW;
ATOM nAtom=RegisterClassEx(&wce);
if(nAtom==0){
return false;
}
return true;
}
HWND Create(LPSTR pszClassName,LPSTR pWndName){
HWND hWnd=CreateWindowEx(0,pszClassName,pWndName,WS_OVERLAPPEDWINDOW,
100,100,500,300,NULL,NULL,g_hInstance,NULL);
return hWnd;
}
void Display(HWND hWnd){


ShowWindow(hWnd,SW_SHOW);
UpdateWindow(hWnd);
}
void Message(){
MSG nMsg={0};
while(GetMessage(&nMsg,NULL,0,0)){
TranslateMessage(&nMsg);
DispatchMessage(&nMsg);
}
}

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
 // TODO: Place code here.
g_hInstance =hInstance;
AllocConsole();
g_hOutput=GetStdHandle(STD_OUTPUT_HANDLE);
if(!Register(WinProc,"WinCreate")){
MessageBox(NULL,"注册失败","Error",MB_OK);
return 0;
}
HWND hWnd=Create("WinCreate","Win");
Display(hWnd);
Message();
return 0;
}
这个代码就是在windows下获取各种按键值,学习windows下编程消息是非常重要的,你把这个代码放到vc6.0中编译运行,然后按下键盘按键会获取键盘的按键的值。
[解决办法]
你建工程有问题吧 建win32控制台应用程序

热点排行