首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

为何将窗口变成嵌入到另一个窗口后就收不到消息了呢

2013-01-01 
为什么将窗口变成嵌入到另一个窗口后就收不到消息了呢?我现在是在一个线程中用PostMessage的方式向一个窗

为什么将窗口变成嵌入到另一个窗口后就收不到消息了呢?
我现在是在一个线程中用PostMessage的方式向一个窗口发送消息,当这个窗口时定层窗口的时候,窗口可以收到这个消息,但是一旦把它签入到另外一个窗口以后就收不到这些消息了,但是又可以收到父窗口用PostMessage方式发送的消息,这是怎么回事儿呢?
[解决办法]
没有代码 不好分析
一、检查句柄是否正确 
二、用GetLastError 看看错误代码
[解决办法]
我贴一个子窗体给主窗体发送消息的例子


//---------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "Unit2.h"
//---------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
#define WM_USER_THREAD_FINISHED WM_USER+0x400
//---------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------
// 重载Form的WndProc以处理自定义消息
void __fastcall TForm1::WndProc(TMessage &Msg)
{
if (Msg.Msg == WM_USER_THREAD_FINISHED)
{
//LPTSTR lp = (LPTSTR)Msg.LParam;
char * lp = (char *)Msg.LParam;
if (lp)
{
if (Msg.WParam == 1)
ShowMessage(AnsiString(lp));
}
}
TForm::WndProc(Msg);
}
void __fastcall TForm1::Button2Click(TObject *Sender)
{
  TForm2 * frm =new TForm2(this);
  frm->ShowModal() ;
  delete frm ;
}
//---------------------------------------




[解决办法]
关键看你如何把这个窗口“嵌入到”别的窗口中。
建议用API:SetParent,而不要用给子窗口的Parent属性赋值的方式。
[解决办法]
告诉楼主,嵌入过后找这个窗体的句柄就特殊一点点了.起码我直接用FindWindow 没能正确找到.


HWND h2 = FindWindowEx(frmMain->scrlbxMain->Handle, NULL, NULL, TEXT("摄像头监控"));
if (h2 != NULL) {
SetWindowPos(h2, NULL, 360, 10, 0, 0, SWP_NOSIZE);
}


我是以当前嵌入窗体的容器为父窗体(frmMain->scrlbxMain->Handle)找才找到("摄像头监控")的,,希望对你有点点用.

热点排行