MFC中处理消息的顺序

MFC应用程序中处理消息的顺序

1.AfxWndProc()           该函数负责接收消息,找到消息所属的CWnd对象,然后调用AfxCallWndProc

2.AfxCallWndProc()  该函数负责保存消息(保存的内容主要是消息标识符和消息参数)供应用程序以后使用,然后调用WindowProc()函数

3.WindowProc()        该函数负责发送消息到OnWndMsg()函数,如果未被处理,则调用DefWindowProc()函数

4.OnWndMsg()         该函数的功能首先按字节对消息进行排序,对于WM_COMMAND消息,调用OnCommand()消息响应函数,对于WM_NOTIFY消息调用OnNotify()消息响应函数。任何被遗漏的消息将是一个窗口消息。OnWndMsg()函数搜索类的消息映像,以找到一个能处理任何窗口消息的处理函数。如果OnWndMsg()函数不能找到这样的处理函数的话,则把消息返回到WindowProc()函数,由它将消息发送给DefWindowProc()函数

5.OnCommand()       该函数查看这是不是一个控件通知(lParam参数不为NULL,如果lParam参数为空的话,说明该消息不是控件通知),如果它是,OnCommand()函数会试图将消息映射到制造通知的控件;如果他不是一个控件通知(或者如果控件拒绝映射的消息)OnCommand()就会调用OnCmdMsg()函数

6.OnCmdMsg()            根据接收消息的类,OnCmdMsg()函数将在一个称为命令传递(Command Routing)的过程中潜在的传递命令消息和控件通知。例如:如果拥有该窗口的类是一个框架类,则命令和通知消息也被传递到视图和文档类,并为该类寻找一个消息处理函数

setsockopt 设置socket 详细用法

1.closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:
BOOL bReuseaddr=TRUE;
setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL));

2. 如果要已经处于连接状态的soket在调用closesocket后强制关闭,不经历
TIME_WAIT的过程:
BOOL bDontLinger = FALSE;
setsockopt(s,SOL_SOCKET,SO_DONTLINGER,(const char*)&bDontLinger,sizeof(BOOL));

3.在send(),recv()过程中有时由于网络状况等原因,发收不能预期进行,而设置收发时限:
int nNetTimeout=1000;//1秒
//发送时限
setsockopt(socket,SOL_S0CKET,SO_SNDTIMEO,(char *)&nNetTimeout,sizeof(int));
//接收时限
setsockopt(socket,SOL_S0CKET,SO_RCVTIMEO,(char *)&nNetTimeout,sizeof(int));

WinCE LED控制

LED控制事实上就是控制设备管脚电平高低, 所控制的设备未必一定是LED灯.
用到的两个函数:NLedGetDeviceInfo(),NLedSetDevice().
用到的结构体:NLED_SETTINGS_INFO.

NLedGetDeviceInfo()原型:
BOOL WINAPI NLedGetDeviceInfo(
  UINT nInfoId,
  void* pOutput
);
其中参数 nInfoId 的取值决定了参数 pOutput 的返回值类型.
NLedGetDeviceInfo
nInfoId取值pOutput类型说明
NLED_COUNT_INFO_IDNLED_COUNT_INFO指定pOutput数据为设备上LED的数量
NLED_SUPPORTS_INFO_IDNLED_SUPPORTS_INFO指定pOutput数据为LED支持的能力信息
NLED_SETTINGS_INFO_IDNLED_SETTINGS_INFO指定pOutput数据为LED电流设置信息

代码高亮转HTML代码软件--HighLight

不知神马原因, 毋这Blog的代码高亮插件高亮不能囧rz, 咱这Web苦手搞了半天也没搞定. 于是就找了个替代方案.


HighLight, 这软件提供Windows版, 可以将code转化成html源码, 然后直接粘进Blog里, 非常好用 ( 罒ω罒)
下载安装后, 打开软件, 看到一非常反人类的操作界面.... 这货不支持代码编辑, 源码只能通过两种方式输入: 源码文件, 剪切板.


而且这里剪切板不是Ctrl+C, Ctrl+V这种方式操作, 而是在某处Ctrl+C了一段代码, 在HighLight里点"从剪切板获取代码"来输入.... 操作蛋疼无比反人类.


界面分两部分, 左侧功能区可以跟预览区脱离.
上个图吧= =!

我第一段Java程序。。。

看了几页Thinking In Java 4th,发现Java和C/C++的语法相去无几~,于是试着写了个Hello。
代码如下:
...

Win7绑定静态arp

久违的被arp攻击了~~于是静态绑定了一下
step1. 找到真实的ip, mac(一般是网关的)
例如 192.168.1.1 11-22-33-44-55-66
step2. 查询要设置的网卡的idx
netsh interface ipv4 show interfaces
可以缩写如下:
netsh i i show in
查询结果如下:
Idx     Met         MTU          状态                名称
---  ----------  ----------  ------------  ---------------------------
  1          50  4294967295  connected     Loopback Pseudo-Interface 1
 10          20        1500  connected     本地连接
 21           1        1500  disconnected  VPN - VPN Client

Win7 双网卡路由设置

渣渣公司不让上外网,于是用了自己的无线网卡上网,两张网卡需要走一个网关,否则都上不去.

Step1. 先搞明白自己两张网卡要配置的内容
例如网卡1是内网,邦死的; 网卡2是自己的连接外网
网卡1:
    IP: 192.168.0.5, GATEWAY: 192.168.0.1, MASK: 255.255.255.0
网卡2:
    IP: 10.10.10.5, GATEWAY: 10.10.10.1, MASK: 255.255.255.0 (网卡2也有可能是动态的)
所有192.168.*.*的包都发到网卡1的网关:192.168.0.1, 其余的都发到网卡2的网关:10.10.10.1