1. 创建4个按钮
CRect rcCreate(0,0,80,80);
m_btTest1.Create(TEXT("Test1"),WS_CHILD|WS_VISIBLE,rcCreate,this,114);
m_btTest2.Create(TEXT("Test2"),WS_CHILD|WS_VISIBLE,rcCreate,this,112);
m_btTest3.Create(TEXT("Test3"),WS_CHILD|WS_VISIBLE,rcCreate,this,111);
m_btTest4.Create(TEXT("Test4"),WS_CHILD|WS_VISIBLE,rcCreate,this,113);
4个按钮位置是重叠的:先看到的是m_btTest4,但先响应的(点击有效)却是m_btTest1。
这是为什么呢?
原因就在于Create的时候,程序会指定每个控件的ZOrder值,先创建的ZOrder值最小,后面逐渐增大。
而关键点就在于: 绘制时,按照ZOrder值由小到大层层绘制,最后绘制排在最上层的控件(m_btTest4),而响应时先处理ZOrder最小的控件(m_btTest1)。
经测试,绘制和响应顺序跟最后面的参数IDC编号(111~114)无关,此编号只是让按钮的响应能够对号入座。
即点击了m_btTest1的控件,程序就会去执行ID=114的相关代码(可由OnCommand函数来截获消息)。
CRect rcCreate(0,0,80,80);
m_btTest1.Create(TEXT("Test1"),WS_CHILD|WS_VISIBLE,rcCreate,this,114);
m_btTest2.Create(TEXT("Test2"),WS_CHILD|WS_VISIBLE,rcCreate,this,112);
m_btTest3.Create(TEXT("Test3"),WS_CHILD|WS_VISIBLE,rcCreate,this,111);
m_btTest4.Create(TEXT("Test4"),WS_CHILD|WS_VISIBLE,rcCreate,this,113);
4个按钮位置是重叠的:先看到的是m_btTest4,但先响应的(点击有效)却是m_btTest1。
这是为什么呢?
原因就在于Create的时候,程序会指定每个控件的ZOrder值,先创建的ZOrder值最小,后面逐渐增大。
而关键点就在于: 绘制时,按照ZOrder值由小到大层层绘制,最后绘制排在最上层的控件(m_btTest4),而响应时先处理ZOrder最小的控件(m_btTest1)。
经测试,绘制和响应顺序跟最后面的参数IDC编号(111~114)无关,此编号只是让按钮的响应能够对号入座。
即点击了m_btTest1的控件,程序就会去执行ID=114的相关代码(可由OnCommand函数来截获消息)。