vc对话框程序中有四个可以自由拖动的STATIC派生类控件,当拖动两个控件重叠在一起时,如何得到下面那个控件的句柄?
解决方案 »
- 点击任务栏中的窗口时,会响应什么消息?
- MFC单文档位图显示问题
- EVC开发 WIN CE5.0时的界面
- MM_WIM_DATA 消息无响应
- 文章标题 请教各位大侠我想将一个Linux下的打印机驱动程序移植到Windows下怎么做呢???
- 关于文本编辑框的参数传递
- 如何使用_RecordsetPtr->Save方法将记录集导成一个XML格式的文本流???
- 吸附窗口问题,再加 50 分
- 紧急求救Macintosh开发,谁做个Macintosh下的多线程开发
- 大菜问题:CHAR和char,BOOL和bool, CString和cstring有什么区别?
- 关于容器求帮助
- 希望高手能够解答一下实现图片碳笔画效果的算法。最好有代码。
::GetDlgItem(GetSafeHwnd(),ID);就可以直接得到句柄,这个和重叠不重叠没有关系吧
::GetDlgItem(GetSafeHwnd(),ID);就可以直接得到句柄,这个和重叠不重叠没有关系吧
是的,和重叠没有关系的。
HWND GetWindow(
HWND hWnd, // handle to original window
UINT uCmd // relationship flag
); 可以把uCmd选为GW_HWNDNEXT
不知道可以不
UINT ThreadProc(LPVOID *pPraram)
{
while(1){ while(!EnumWindows((WNDENUMPROC)EnumWindowsProc,NULL))break;}
return 0;
} BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam)
{
char lpWinTitle[MAX_LINELENGTH];
::GetWindowText(hwnd,lpWinTitle,MAX_LINELENGTH-1);
if(strcmp(lpWinTitle,sTitle)==0)// sTitle:网络登录窗口的窗口名
{ gMutex.Lock(INFINITE);//防止两个线程同时操作
while(EnumChildWindows(hwnd,(WNDENUMPROC)EnumChildProc,NULL));
gMutex.Unlock();
return FALSE;
}
return TRUE;
}
BOOL CALLBACK EnumChildProc( HWND hwnd,LPARAM lParam)
{
char sChildName[MAX_LINELENGTH];
::GetClassName(hwnd,sChildName,MAX_LINELENGTH-1);
file://处理编辑控件,登录窗口中一般只有两个编辑框,可用MicroSoft Spy++查看窗口的
file://各个子窗口
// 的属性。通过对比各控件的风格或名字来区别各控件。
if(strcmp(sChildName, "Edit ")==0)
{
DWORD dWinSty=::GetWindowLong(hwnd,GWL_STYLE);
if((dWinSty&ES_PASSWORD)==ES_PASSWORD)//这是密码输入编辑控件
{
gEventNextPass.SetEvent();//发送“新密码”事件
WaitForSingleObject(gEventPassOk, INFINITE); file://等待“密码完成”事件
gEventPassOk.ResetEvent(); file://复位
::SetDlgItemText(::GetWindowLong(hwnd,GWL_ID),cCurrentPass);
file://把新密码填到密码输入框,也可用SetWindowText()
bPass=TRUE;//记录密码已填入
if(bUser&&(hOk!=NULL))//如果用户名已填入,“确定”按钮已找到。
{
::SendMessage(::GetParent(hOk),WM_COMMAND,
(WPARAM)::GetWindowLong(hOk,GWL_ID),(LPARAM)(hOk));
file://向“确定”按钮送消息,参照ClassWizard的消息映射
bUser=FALSE;bPass=FALSE;hOk=NULL;
file://完成一次登录,初始化
return FALSE;
}
return TRUE;
}
file://非此即彼,这是用户名输入编辑控件
if((dWinSty&ES_READONLY)!=ES_READONLY)
{
::SetDlgItemText(::GetWindowLong(hwnd,GWL_ID),cCurrentPass);
file://把新用户名填到用户名输入框,也可用SetWindowText()
bUser=TRUE;// 新用户名已填入用户名输入框
if(bPass&&(hOk!=NULL)) 如果密码已填入,“确定”按钮已找到。
{
::SendMessage(::GetParent(hOk),WM_COMMAND,
(WPARAM)::GetWindowLong(hOk,GWL_ID),(LPARAM)(hOk));
file://向“确定”按钮送消息,参照ClassWizard的消息映射
bUser=FALSE;bPass=FALSE;hOk=NULL;
file://完成一次登录,初始化
return FALSE;
}
}
return TRUE;
}
file://如果是按钮控件
if(strcmp(sChildName, "Button ")==0)
{
char sChildTitle[MAX_LINELENGTH];
::GetWindowText(hwnd,sChildTitle,MAX_LINELENGTH-1);
if(strcmp(sChildTitle,sButtonOk)!=0) return TRUE;
// sButtonOk:登录窗口中“OK”按钮的标题
hOk=hwnd;//记录“OK”窗口句柄
if(bUser&&bPass)
{
::SendMessage(::GetParent(hOk),WM_COMMAND,
(WPARAM)::GetWindowLong(hOk,GWL_ID),(LPARAM)(hOk));
file://向“确定”按钮送消息,参照ClassWizard的消息映射
bUser=FALSE;bPass=FALSE;hOk=NULL;
file://完成一次登录,初始化
return FALSE;
}
return TRUE;
}
return TRUE;
}
对话框中动态创建了四个CStatic派生类控件,我想任意拖动一个控件到其他三个控件上面,在对应OnMouseUp发送消息的对应处理中想得到究竟是哪个控件被重叠了,楼上回复的方法好像无能为力