VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 537|回复: 7

GET_KEYSTATE_LPARAM为啥在MFC中不能用?要怎样才能用?

[复制链接]
75_avatar_middle
最佳答案
0 
在线会员 发表于 2019-3-15 15:27:46 | 显示全部楼层 |阅读模式
3驿站币
WNDPROC oldproc;
LRESULT CALLBACK NewProc(
  HWND hwnd,       // handle to window
  UINT WM_APPCOMMAND,       // WM_APPCOMMAND
  WPARAM wParam,   // handle to window (DWORD)
  LPARAM lParam    // command, device, and virtual keys
)
{
        if(GET_KEYSTATE_LPARAM(lParam)==FAPPCOMMAND_KEY)
        {
                return 1;
        }
        else
        {
                return oldproc(hwnd,WM_APPCOMMAND,wParam,lParam);
        }
}

void CMy1Dlg::OnButton19()
{
        // TODO: Add your control notification handler code here
        oldproc=(WNDPROC)SetWindowLong(m_hWnd,GWL_WNDPROC,(LONG)NewProc);
}
提示是:
'GET_KEYSTATE_LPARAM' : undeclared identifier
'FAPPCOMMAND_KEY' : undeclared identifier

msdn的解释是:
lParam
Use the following code to crack the lParam parameter.
cmd  = GET_APPCOMMAND_LPARAM(lParam);
uDevice = GET_DEVICE_LPARAM(lParam);
dwKeys = GET_KEYSTATE_LPARAM(lParam);
Where cmd indicates the application command. This parameter can be one of the following values.
Where uDevice indicates the input device that generated the input event. It can be one of the following values. Value Meaning
FAPPCOMMAND_KEY User pressed a key.
FAPPCOMMAND_MOUSE User clicked a mouse button.
FAPPCOMMAND_OEM An unidentified hardware source generated the event. It could be a mouse or a keyboard event.
没有说不能用呀?为什么会这样?请问要如何解决?





上一篇:WPS或Word如何使C++代码高亮显示?
下一篇:SetItemText错误
81_avatar_middle
最佳答案
3 
online_supermod 发表于 2019-3-15 16:01:46 | 显示全部楼层
GET_KEYSTATE_LPARAM 这个宏只要包含 Windows.h 就可以了
楼主没包含这个吗,不应该有这个问题啊
75_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2019-3-15 16:26:38 | 显示全部楼层
本帖最后由 cumulonimbus 于 2019-3-15 16:41 编辑

GET_KEYSTATE_LPARAM为啥在MFC中不能用?要怎样才能用? 1.rar (3.48 MB, 下载次数: 0)
75_avatar_middle
最佳答案
0 
在线会员 发表于 2019-3-15 17:05:31 | 显示全部楼层
GET_KEYSTATE_LPARAM和FAPPCOMMAND_KEY定义在#include<WinUser.h>中
...
#if(_WIN32_WINNT >= 0x0501)
#define APPCOMMAND_MICROPHONE_VOLUME_MUTE 24
#define APPCOMMAND_MICROPHONE_VOLUME_DOWN 25
#define APPCOMMAND_MICROPHONE_VOLUME_UP   26
#define APPCOMMAND_HELP                   27
#define APPCOMMAND_FIND                   28
#define APPCOMMAND_NEW                    29
#define APPCOMMAND_OPEN                   30
#define APPCOMMAND_CLOSE                  31
#define APPCOMMAND_SAVE                   32
#define APPCOMMAND_PRINT                  33
#define APPCOMMAND_UNDO                   34
#define APPCOMMAND_REDO                   35
#define APPCOMMAND_COPY                   36
#define APPCOMMAND_CUT                    37
#define APPCOMMAND_PASTE                  38
#define APPCOMMAND_REPLY_TO_MAIL          39
#define APPCOMMAND_FORWARD_MAIL           40
#define APPCOMMAND_SEND_MAIL              41
#define APPCOMMAND_SPELL_CHECK            42
#define APPCOMMAND_DICTATE_OR_COMMAND_CONTROL_TOGGLE    43
#define APPCOMMAND_MIC_ON_OFF_TOGGLE      44
#define APPCOMMAND_CORRECTION_LIST        45
#define APPCOMMAND_MEDIA_PLAY             46
#define APPCOMMAND_MEDIA_PAUSE            47
#define APPCOMMAND_MEDIA_RECORD           48
#define APPCOMMAND_MEDIA_FAST_FORWARD     49
#define APPCOMMAND_MEDIA_REWIND           50
#define APPCOMMAND_MEDIA_CHANNEL_UP       51
#define APPCOMMAND_MEDIA_CHANNEL_DOWN     52
#endif /* _WIN32_WINNT >= 0x0501 */
#if(_WIN32_WINNT >= 0x0600)
#define APPCOMMAND_DELETE                 53
#define APPCOMMAND_DWM_FLIP3D             54
#endif /* _WIN32_WINNT >= 0x0600 */

#define FAPPCOMMAND_MOUSE 0x8000
#define FAPPCOMMAND_KEY   0
#define FAPPCOMMAND_OEM   0x1000
#define FAPPCOMMAND_MASK  0xF000

#define GET_APPCOMMAND_LPARAM(lParam) ((short)(HIWORD(lParam) & ~FAPPCOMMAND_MASK))
#define GET_DEVICE_LPARAM(lParam)     ((WORD)(HIWORD(lParam) & FAPPCOMMAND_MASK))
#define GET_MOUSEORKEY_LPARAM         GET_DEVICE_LPARAM
#define GET_FLAGS_LPARAM(lParam)      (LOWORD(lParam))
#define GET_KEYSTATE_LPARAM(lParam)   GET_FLAGS_LPARAM(lParam)
#endif /* _WIN32_WINNT >= 0x0500 */
...

注意#if(_WIN32_WINNT >= 0x0501)条件
GET_KEYSTATE_LPARAM为啥在MFC中不能用?要怎样才能用?

评分

参与人数 1威望 +2 热心值 +2 收起 理由
81_avatar_small Debug + 2 + 2 赞一个!

查看全部评分

75_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2019-3-15 19:19:19 | 显示全部楼层
本帖最后由 cumulonimbus 于 2019-3-15 19:20 编辑

GET_KEYSTATE_LPARAM为啥在MFC中不能用?要怎样才能用?
xx_player 发表于 2019-3-15 17:05
GET_KEYSTATE_LPARAM和FAPPCOMMAND_KEY定义在#include中
...
#if(_WIN32_WINNT >= 0x0501)


为啥我按照你的提示在头文件中定义了#include<WinUser.h>
但是还是出错呢?好奇怪呀
33_avatar_middle
最佳答案
0 
online_supermod 发表于 2019-3-15 22:39:38 | 显示全部楼层
#include <WinUser.h>
WNDPROC oldproc;
LRESULT CALLBACK NewProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
        if (GET_KEYSTATE_LPARAM(lParam) == FAPPCOMMAND_KEY)
        {
                return 1;
        }
        else
        {
                return oldproc(hwnd, WM_APPCOMMAND, wParam, lParam);
        }
};

你的代码都有问题,当然编译通不过了,你试下上面这个
51_avatar_middle
最佳答案
82 
online_admins 发表于 2019-3-15 23:34:07 | 显示全部楼层
cumulonimbus 发表于 2019-3-15 19:19
为啥我按照你的提示在头文件中定义了#include
但是还是出错呢?好奇怪呀

不是提示你了吗?#if(_WIN32_WINNT >= 0x0501)
所以在你的程序中加上:
#define _WIN32_WINNT 0x0501
试试
75_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2019-3-16 11:51:48 | 显示全部楼层
Syc 发表于 2019-3-15 23:34
不是提示你了吗?#if(_WIN32_WINNT >= 0x0501)
所以在你的程序中加上:
#define _WIN32_WINNT 0x0501


GET_KEYSTATE_LPARAM为啥在MFC中不能用?要怎样才能用?



加了,也没用
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )|网站地图wx_jqr

GMT+8, 2020-9-27 19:39

Powered by CcTry.CoM

© 2009-2020 cctry.com

快速回复 返回顶部 返回列表