标题:All about windows programming
只看楼主
yeshirow
Rank: 4
等 级:贵宾
威 望:10
帖 子:854
专家分:0
注 册:2006-6-8
得分:0 
鍵盤輸入處理也是 Windows Programming 的一部分啊.....
只是不會處理加速鍵...(Accelerator)

原來朋友仔感情再天真, 亦是我永遠也會愛惜的人, 明日愛他人, 也記住學會不要緊; 原來朋友比戀人更高分, 亦讓我開始懂得不記恨, 若大家都敏感, 我更要永遠記得拒絕再因小事怪人, 爲何沒有這條校訓...Twins-朋友仔 MCSD Training
2006-08-07 06:42
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
得分:0 

那就与我对你的先前的表述刚好相反。 你是想 以Alt+F 来作为对 第一个Button 的 按动。 也就是说, 我可以用鼠标来点击 Button1, 我也可以用 Alt +F 来等同于点击 Button1. 那就要对 按键消息作出处理了。

下次给你一个按键的演示程序。


自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2006-08-07 06:49
yeshirow
Rank: 4
等 级:贵宾
威 望:10
帖 子:854
专家分:0
注 册:2006-6-8
得分:0 

還要加個 處理 Tab 鍵盤處理的示例呀.

如果當前焦點在第一個 Button, 按一下 Tab 時, 焦點會自動轉移到第二個 BUTTON.


原來朋友仔感情再天真, 亦是我永遠也會愛惜的人, 明日愛他人, 也記住學會不要緊; 原來朋友比戀人更高分, 亦讓我開始懂得不記恨, 若大家都敏感, 我更要永遠記得拒絕再因小事怪人, 爲何沒有這條校訓...Twins-朋友仔 MCSD Training
2006-08-07 06:55
myajax95
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:30
帖 子:2978
专家分:0
注 册:2006-3-5
得分:0 
这么复杂的程序为什么不用MFC呢?MFC的Message Map比这种一堆case一个一个找message ID的方法简单多了。MFC用accelerator处理键盘输入,以及button之类的都很简单,基本什么都很简单。

http://myajax95./
2006-08-07 07:13
yeshirow
Rank: 4
等 级:贵宾
威 望:10
帖 子:854
专家分:0
注 册:2006-6-8
得分:0 

MFC 會處理這些東西, 我知道.

但討論的關鍵在於 MFC 是怎麽處理這些東西的.


原來朋友仔感情再天真, 亦是我永遠也會愛惜的人, 明日愛他人, 也記住學會不要緊; 原來朋友比戀人更高分, 亦讓我開始懂得不記恨, 若大家都敏感, 我更要永遠記得拒絕再因小事怪人, 爲何沒有這條校訓...Twins-朋友仔 MCSD Training
2006-08-07 16:24
aogun
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:638
专家分:0
注 册:2006-4-5
得分:0 
Accelerator用起来还是比较简单的吧?
你的代码中需要加入一些东西
WinMain中需要加入
HACCEL hAccelTable;
如果有resource编辑的话可以直接编辑Accelerator列表,然后用
LoadAccelerators(hInstance, (LPCTSTR)(资源中Accelerator 对应的ID));
加载
如果没有的话可以自己创建,定义一个数组,例:
ACCEL acc[]=
{
FALT, 'f', ID_FRIST ,
FALT, 's', ID_SECOND ,
};
然后用hAccelTable = CreateAcceleratorTable(acc, 2);创建,其中ID_FRIST是你设置GWL_ID时的ID
最后消息循环用下面的
while(GetMessage(&msg, 0, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
代替
就两步,还是比较简单的

世界上总共有 10 种人,一种懂得什么是二进制 ,一种不懂。
2006-08-07 18:11
yeshirow
Rank: 4
等 级:贵宾
威 望:10
帖 子:854
专家分:0
注 册:2006-6-8
得分:0 

OK, Accelerator 部分解決了, 不是使用資源編譯器的
---------------------------------------------------------------
HACCEL g_hAcl;

void MakeAccel()
{
ACCEL acl[2] = {{FALT, 'f', 1}, {FALT, 's', 2}};
g_hAcl = CreateAcceleratorTable(acl, 2);
LoadAccelerators(hInst, MAKEINTRESOURCE(g_hAcl));
}

void ReleaseAccel()
{
DestroyAccelerator(g_hAcl);
}

在 WM_CREATE 加載, 在 WM_DESTROY 卸載:
.....
case WM_CREATE:
......
MakeAccel();
....
break;
case WM_DESTROY:
ReleaseAccel();
PostQuitMessage(0);
return 0L;
......

在 Message Loop 判斷:
while(GetMessage(&msg, NULL, 0, 0)
{
if(!TranslateAccelerator(msg.hwnd, g_hAcl, &msg)
// 我開始在這裏忘記了使用這個....
// 感謝 gogun 的提醒

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

}

現在還剩下 Tab 的處理了.
Tab 的處理也應該有一種機制的吧, 不要自己跟蹤得那麽辛苦啊.


原來朋友仔感情再天真, 亦是我永遠也會愛惜的人, 明日愛他人, 也記住學會不要緊; 原來朋友比戀人更高分, 亦讓我開始懂得不記恨, 若大家都敏感, 我更要永遠記得拒絕再因小事怪人, 爲何沒有這條校訓...Twins-朋友仔 MCSD Training
2006-08-07 21:34
corrupt
Rank: 2
等 级:新手上路
威 望:3
帖 子:535
专家分:0
注 册:2004-9-29
得分:0 
kai你的五子旗 怎么不给个 .dsw 的文件,这让我搞了半天......
这么长时间过了,不知道你写完了五子旗的人机对战没有,人人对战我也写好了,效果一般,只是简单的相应鼠标而已。也写好了机器人的一部分算法模块。但在让机器人变的更“聪明”上我碰到了难题。 不知道你的算法如何?可否告知一二。

以前用sdk写过俄罗斯方块,现在改用mfc写了。所以如果 你有你完整的五子旗程序让我共享下吧。。谢谢

2006-08-08 12:43



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-4546-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.702606 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved