mfc系统与菜单设置

学习方法:

主要就是模拟开发,即使你的基础不牢,模拟训练反而有助于对前期的语法理解。API的量大,API比SOCKET要简单一些,因为直观,按钮,下拉。

windows资源:

常用的资源有对话框、菜单、图标、光标、字符串表、快捷键、位图等。

1、窗口常用功能汇总:

a)SetForeGroundWindowBringToTop

SetForeGroundWindow()BringToTop()
用于将指定的窗口设置为前台窗口,并激活它用于将指定的窗口提升到所有非顶层窗口之上。

b)GetSystemMenu()GetMenu()SetMenu()的区别

方法说明
GetSystemMenu()功能:用于获取窗口系统菜单的句柄。系统菜单是位于窗口标题栏左上角的小图标,当用户点击这个图标时,会弹出一个包含窗口控制命令的菜单。
GetMenu()功能:用于获取指定窗口的菜单句柄。
SetMenu()功能:用于设置指定窗口的菜单。

c)SetCapture设置捕捉的技术

  1. 通常在某个事件触发时调用 SetCapture,例如用户按下鼠标按钮。
  2. 一旦调用 SetCapture,鼠标事件(WM_MOUSEMOVE, WM_LBUTTONDOWN, WM_LBUTTONUP 等)都会被发送到指定的窗口,即使鼠标光标移出了该窗口。
  3. 为了释放捕获,需要调用 ReleaseCapture 函数。
    d)GetWindow主窗口遍历和子窗口搜索
2、消息分类:系统消息和用户消息:

a)类向导中第一页和第二页子窗口(反射型)消息和主窗口基础消息,全部都是系统消息。
b)系统消息的范围是:0-1024(WM_USER),用户消息(也叫自定义消息)的WM_USER到32767之间。

3、消息发送的用途:

a)往往是一个多线程程序的底层工作线程,向主线程的界面发送通知(包含数据)
b)子窗口向父窗口发送消息(可能携带数据)
c)一个进程向另外一个进程发送消息(可能携带数据)
注意:自从有了消息发送的方法之后,子窗口可以不再使用指针来调用父窗口了!!
参见CEyeCtrl:甚至都不知道父窗口是哪个类!!

4、面试题:SendMessage()PostMessage()有什么区别
  1. PostMessageSendMessage 都是 Windows API 中用于向窗口发送消息的函数,但它们在发送消息的方式和行为上有一些区别。
  2. PostMessage:消息发送给目标窗口消息队列中后,立即返回,不等待结果返回,是是异步的。
    • 消息被放入目标窗口的消息队列中。
    • 函数立即返回,不会等待目标窗口处理消息。
    • 不保证消息的实时性和顺序性。
  3. SendMessage:发送给目标窗口后等待消息处理完成后才返回:
    • 消息直接发送给目标窗口。
    • 函数等待目标窗口处理完消息后才返回。
    • 保证消息的实时性和顺序性。
  4. 总结而言:
    PostMessageSendMessage
    异步同步
    放入目标窗口消息队列中发送给目标窗口,并等待消息处理完成
    提高程序响应速度可能会阻塞
    无法保证消息的处理顺序消息按顺序处理
    如果不需要等待处理结果或 消息的实时性对应用程序没有太大影响如果需要等待处理结果或 消息的顺序和实时性对应用程序非常重要

附录:主窗口是什么?
auto p = GetDesktopWindow();
p = p->GetWindow(GW_CHILD);
TCHAR s[256];
while §
{
//GetClassName(p->GetSafeHwnd(), s, _countof(s));
p->GetWindowText(s, _countof(s));
TRACE(_T(“主窗口:%s\n”),s);
p = p->GetWindow(GW_HWNDNEXT);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值