//////////////////////////////////////////////////////////////////////////////////////////////////
//
// 文件: Example8_2.cpp
//
// 译者:秦春
//
// 系统:Windows Vista, VC++2008
//
// 描述:演示如何使用DirectInput的鼠标设备及不同协调层级和数据获取模式之间的区别。
//
// 日期:2009.9.21
//
//////////////////////////////////////////////////////////////////////////////////////////////////
#define STRICT
#define DIRECTINPUT_VERSION 0x0800
#include <tchar.h>
#include <windows.h>
#include <commctrl.h>
#include <basetsd.h>
#include <dinput.h>
#include <stdio.h>
#pragma warning( disable : 4996 ) // disable deprecated warning
#include <strsafe.h>
#pragma warning( default : 4996 )
#include "resource.h"
#if defined(DEBUG) | defined(_DEBUG)
#include <crtdbg.h>
#endif
//-----------------------------------------------------------------------------
// 函数原型
//-----------------------------------------------------------------------------
INT_PTR CALLBACK MainDlgProc( HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam );
HRESULT OnInitDialog( HWND hDlg );
VOID UpdateUI( HWND hDlg );
HRESULT OnCreateDevice( HWND hDlg );
HRESULT ReadImmediateData( HWND hDlg );
HRESULT ReadBufferedData( HWND hDlg );
VOID FreeDirectInput();
//-----------------------------------------------------------------------------
// 定义、常量和全局变量
//-----------------------------------------------------------------------------
#define SAFE_DELETE(p) { if(p) { delete (p); (p)=NULL; } }
#define SAFE_RELEASE(p) { if(p) { (p)->Release(); (p)=NULL; } }
#define SAMPLE_BUFFER_SIZE 16 // arbitrary number of buffer elements
LPDIRECTINPUT8 g_pDI = NULL;
LPDIRECTINPUTDEVICE8 g_pMouse = NULL;
//-----------------------------------------------------------------------------
// Name: WinMain()
// Desc: 应用程序入口。因为我们用对话框作为用户接口,所以我们不需要提取消息
//-----------------------------------------------------------------------------
int WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, int )
{
// 为建立DEBUG,允许运行时内存检测
#if defined(DEBUG) | defined(_DEBUG)
_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
#endif
InitCommonControls();
// 显示主对话框
DialogBox( hInst, MAKEINTRESOURCE(IDD_Mouse), NULL, MainDlgProc );
return TRUE;
}
//-----------------------------------------------------------------------------
// Name: MainDlgProc()
// Desc: 处理对话框消息
//-----------------------------------------------------------------------------
INT_PTR CALLBACK MainDlgProc( HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam )
{
switch( msg )
{
case WM_INITDIALOG:
OnInitDialog( hDlg );
break;
case WM_COMMAND:
switch( LOWORD(wParam) )
{
case IDCANCEL:
EndDialog( hDlg, 0 );
break;
case IDC_EXCLUSIVE:
case IDC_NONEXCLUSIVE:
case IDC_FOREGROUND:
case IDC_BACKGROUND:
case IDC_IMMEDIATE:
case IDC_BUFFERED:
UpdateUI( hDlg );
break;
case IDM_CREATEDEVICE:
case IDM_RELEASEDEVICE:
case IDC_CREATEDEVICE:
if( NULL == g_pMouse )
{
if( FAILED( OnCreateDevice( hDlg ) ) )
{
MessageBox( hDlg, _T("CreateDevice() 失败!")
_T("本示例将退出。"),
_T("Mouse"), MB_ICONERROR | MB_OK );
FreeDirectInput();
}
SetFocus( GetDlgItem( hDlg, IDC_CREATEDEVICE ) );
}
else
{
FreeDirectInput();
}
UpdateUI( hDlg );
break;
default:
return FALSE; // 未处理的消息
}
break;
case WM_ENTERMENULOOP:
// 释放设备,如果是在独占模式,光标将重新出现
if( g_pMouse )
{
g_pMouse->Unacquire();
KillTimer( hDlg, 0 ); // 停止计时器,因此设备将不再获得控制权
SetDlgItemText( hDlg, IDC_DATA, TEXT("失去控制") );
}
break;
case WM_EXITMENULOOP:
// 当离开菜单循环时,确保设备获得控制权
if( g_pMouse )
{
g_pMouse->Acquire();
SetTimer( hDlg, 0, 1000 / 12, NULL ); // 重新开始计时
}
break;
case WM_ACTIVATE:
if( WA_INACTIVE != wParam && g_pMouse )
{
// 如果获得焦点,确保设备获得控制权
g_pMouse->Acquire();
}
break;
case WM_TIMER:
// 更新输入设备的每个定时消息
{
BOOL bImmediate = ( IsDlgButtonChecked( hDlg, IDC_IMMEDIATE ) == BST_CHECKED );
if( bImmediate )
{
if( FAILED( ReadImmediateData( hDlg ) ) )
{
KillTimer( hDlg, 0 );
MessageBox( NULL, _T("读输入状态错误! ")
_T("本示例将退出。"),
_T("Mouse"), MB_ICONERROR | MB_OK );
EndDialog( hDlg, TRUE );
}
}
else
{
if( FAILED( ReadBufferedData( hDlg ) ) )
{
KillTimer( hDlg, 0 );
MessageBox( NULL, _T("读输入状态错误! ")
_T("本示例将退出。"),
_T("Mouse"), MB_ICONERROR | MB_OK );
EndDialog( hDlg, TRUE );
}
}
}
break;
case WM_DESTROY:
// 清除所有内容
KillTimer( hDlg, 0 );
FreeDirectInput();
break;
default:
return FALSE; // 未处理消息
}
return TRUE; // 消息已处理
}
//-----------------------------------------------------------------------------
// Name: OnInitDialog()
// Desc: 初始化 DirectInput 变量
//-----------------------------------------------------------------------------
HRESULT OnInitDialog( HWND hDlg )
{
// 加载图标
#ifdef _WIN64
HINSTANCE hInst = (HINSTANCE) GetWindowLongPtr( hDlg, GWLP_HINSTANCE );
#else
HINSTANCE hInst = (HINSTANCE) GetWindowLong( hDlg, GWL_HINSTANCE );
#endif
HICON hIcon = LoadIcon( hInst, MAKEINTRESOURCE( IDI_MAIN ) );
// 为本对话框设置图标
PostMessage( hDlg, WM_SETICON, ICON_BIG, (LPARAM) hIcon ); // 设置大图标
PostMessage( hDlg, WM_SETICON, ICON_SMALL, (LPARAM) hIcon ); // 设置小图标
// 默认检查“独占”、“前台”和“直接”按钮
CheckRadioButton( hDlg, IDC_EXCLUSIVE, IDC_NONEXCLUSIVE, IDC_EXCLUSIVE );
CheckRadioButton( hDlg, IDC_FOREGROUND, IDC_BACKGROUND, IDC_FOREGROUND );
CheckRadioButton( hDlg, IDC_IMMEDIATE, IDC_BUFFERED, IDC_IMMEDIATE );
UpdateUI( hDlg );
return S_OK;
}
//-----------------------------------------------------------------------------
// Name: UpdateUI()
// Desc: 允许/禁止用户接口,基于用户接口设置对话框行为文本
//-----------------------------------------------------------------------------
VOID UpdateUI( HWND
没有合适的资源?快使用搜索试试~ 我知道了~
《网络游戏客户端编程》第8章
共85个文件
pdb:9个
obj:8个
cpp:8个
需积分: 3 53 下载量 143 浏览量
2009-10-05
14:54:27
上传
评论
收藏 5.7MB RAR 举报
温馨提示
这是我自己编写的《网络游戏客户端编程》第7章的示例程序,源程序中对一些关键代码都有详细注释,望能对初学者有所帮助,也希望能得到朋友的指教。
资源推荐
资源详情
资源评论
收起资源包目录
8.rar (85个子文件)
Example8
Example8.ncb 18.28MB
Example8_2
Example8_2.cpp 24KB
Example8_2.rc 5KB
Example8_2.vcproj.秦春.user.user 1KB
Example8_2.aps 61KB
Common
directx.ico 25KB
Debug
vc90.idb 363KB
Example8_2.res 27KB
vc90.pdb 156KB
mt.dep 63B
Example8_2.exe.intermediate.manifest 621B
BuildLog.htm 6KB
Example8_2.obj 62KB
resource.h 1KB
Example8_2.manifest 678B
Example8_2.vcproj 4KB
Example8_1
Example8_1.rc 4KB
Common
directx.ico 25KB
Debug
vc90.idb 363KB
Example8_1.exe.intermediate.manifest 621B
Example8_1.res 27KB
vc90.pdb 156KB
mt.dep 63B
BuildLog.htm 6KB
Example8_1.obj 58KB
resource.h 1KB
Example8_1.vcproj.秦春.user.user 1KB
Example8_1.vcproj 4KB
Example8_1.aps 61KB
Example8_1.cpp 22KB
Example8_1.manifest 681B
Example8_4
d3dUtility.cpp 6KB
chr_h_047.X 272KB
d3dUtility.h 3KB
Example8_4.cpp 9KB
chr_h_047.tga 192KB
Debug
Example8_4.exe.intermediate.manifest 621B
CDirectInput.obj 34KB
vc90.idb 715KB
vc90.pdb 460KB
mt.dep 63B
d3dUtility.obj 83KB
Example8_4.obj 318KB
BuildLog.htm 6KB
CDirectInput.cpp 5KB
CDirectInput.h 2KB
Example8_4.vcproj.秦春.user.user 1KB
resource.h 499B
Example8_4.vcproj 4KB
Example8.sln 2KB
Debug
Example8_4.pdb 1.03MB
Example8_3.exe 125KB
Example8_3.pdb 1.03MB
Example8_2.exe 78KB
Example8_1.exe 82KB
Example8_4.exe 122KB
Example8_5.exe 136KB
Example8_1.pdb 523KB
Example8_5.ilk 649KB
Example8_5.pdb 1.09MB
Example8_2.ilk 452KB
Example8_1.ilk 448KB
Example8_4.ilk 617KB
Example8_2.pdb 523KB
Example8_3.ilk 640KB
Example8.suo 21KB
Example8_3
Example8_3.vcproj.秦春.user.user 1KB
d3dUtility.cpp 6KB
d3dUtility.h 3KB
Example8_3.cpp 11KB
Example8_3.aps 33KB
Example8_3.vcproj 4KB
Debug
CDirectInput.obj 34KB
vc90.idb 715KB
Example8_3.obj 332KB
vc90.pdb 460KB
mt.dep 63B
d3dUtility.obj 83KB
Example8_3.exe.intermediate.manifest 621B
BuildLog.htm 6KB
CDirectInput.cpp 5KB
CDirectInput.h 2KB
resource.h 499B
su37_ru.jpg 87KB
su37.x 211KB
共 85 条
- 1
资源评论
qinchunlf
- 粉丝: 0
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Android面试题.txt
- chujuyingshi1129802.apk
- 865804808983585自动化办公必备numpy、pandas数据处理课件.zip
- Fences 5是一款桌面整理软件,主要用于Windows操作系统,能够帮助用户更有效地管理和组织桌面上的图标和文件
- Appium入门 appium-desktop安装包,下载即可安装使用
- 初步图优化之后的fb bev 结构图
- 爬取cnnvd网站代码最新的 2024年
- 资源专区-毕业设计-数据分析-CRM客户关系管理系统
- 毕业设计-使用Matlab基于遗传算法+非线性规划实现的函数寻优算法-附项目源码.zip
- api接口python.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功