win32程序中注册热键问题

cseek 2007-02-27 02:53:44
我想在我的win32程序中使用热键来达到隐藏窗体和显示窗体的目的。搜索以前的帖子看到一篇BCB下的用法:
//头文件中
......
private: // User declarations
void __fastcall ReceiveMessage(TMessage &MyMsg);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_HOTKEY, TMessage, ReceiveMessage)
END_MESSAGE_MAP(TForm)
......
//单元文件中
......
void __fastcall TForm1::FormCreate(TObject *Sender)
{
int HotKeyId = GlobalAddAtom("MyHotKey") - 0xC000;
RegisterHotKey(Handle, HotKeyId, MOD_CONTROL, 0x41);
}
......
void __fastcall TForm1::ReceiveMessage(TMessage &MyMsg)
{
if((MyMsg.LParamLo == MOD_CONTROL) && (MyMsg.LParamHi == 0x41))
{
//按下Ctrl+A将执行的代码
}
TForm::Dispatch(&MyMsg);
}
但是我将它复制到我的程序后发现没有作用。然后用MessageBox函数看了下是否执行到了FormCreate函数,发现程序就没有执行到这里。我的问题:

1、如何修改程序使之能执行FormCreate函数?

2、我查了下MSDN中关于RegisterHotKey的用法,发现只要HotKeyId是个常数即可,但是为什么还要int HotKeyId = GlobalAddAtom("MyHotKey") - 0xC000; 一下呢?(查询了N多有关RegisterHotKey的例子,发现里面都有用到这种方法)

3、RegisterHotKey函数中的第一个参数Handle之前并没有定义,可是为什么还能正常编译过去呢?

4、窗体的隐藏和显示是否可以直接这样:
TForm1->DOHIDE();//hide window
TForm1->DOSHOW();//show window?

5、如果该程序要用vc6。0编译,请问应该如何修改?

小弟初学win32编程,还请大家帮忙,最好能符完整代码,也好让我认识的更清楚。谢谢!
...全文
367 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
WinWing 2007-02-27
  • 打赏
  • 举报
回复
HotKeyId = GlobalAddAtom("MyHotKey") - 0xC000;
是为了取得唯一的ID号
WinWing 2007-02-27
  • 打赏
  • 举报
回复
可以利用IDE的功能直接添加。VC++有这个功能,resource->Accelerator,插入资源你会吧:)
cseek 2007-02-27
  • 打赏
  • 举报
回复
这个明白了,和visible域有关系,呵呵
关于热键注册,请问还有别的方法么?谁能给个实例呢?
Piao_Polar 2007-02-27
  • 打赏
  • 举报
回复
是不是要个else ~
cseek 2007-02-27
  • 打赏
  • 举报
回复
感谢!
在第四个问题时候我用
if(!this->Visible)
this->Show();
if(this->Visible)
this->Hide();

但是窗口一旦被hide后就无法再show出来了,为什么呢?
kangji 2007-02-27
  • 打赏
  • 举报
回复
1,在你IDE里面设置窗体的OnCreate事件为FormCreate
2,可以直接写RegisterHotKey(Handle, 2007, MOD_CONTROL, 0x41);不冲突就行
3,Handle是TForm类的属性,不是未定义的哦
4,if (this->Visible) this->Hide();
else this->Show();
5,自动产生一个MFC窗体,把热键注册一下,dlg->ShowWindow(),参考MSDN

70,017

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧