我相用线程处理一个由该线程创建的窗口的消息,但老是出问题.1)执行CreateWindowEx老是出错,RegisterClass的TWndClass内容如下:
With T_WindowClass do
begin
style := 0;
lpszMenuName := nil;
cbClsExtra := 0;
cbWndExtra := 0;
hInstance := 0;
hIcon := 0;
hCursor := 0;
hbrBackground := 0;
lpszClassName := 'TSocketMSGWindow';
lpfnWndProc := @SocketWndProc;
end;
然后执行
FSocketMsgProcHWND := CreateWindowEx( WS_EX_TOOLWINDOW
, T_WindowClass.lpszClassName , ''
, WS_POPUP{!0}, 0, 0, 0, 0, 0, 0, HInstance, nil);
的时候就出错了,先是发送了一条消息到SocketWndProc所在的消息处理过程,然后又发了一条HWND为0的消息到SocketWndProc,这时处理之后就出错了.请问是什么一回事??
With T_WindowClass do
begin
style := 0;
lpszMenuName := nil;
cbClsExtra := 0;
cbWndExtra := 0;
hInstance := 0;
hIcon := 0;
hCursor := 0;
hbrBackground := 0;
lpszClassName := 'TSocketMSGWindow';
lpfnWndProc := @SocketWndProc;
end;
然后执行
FSocketMsgProcHWND := CreateWindowEx( WS_EX_TOOLWINDOW
, T_WindowClass.lpszClassName , ''
, WS_POPUP{!0}, 0, 0, 0, 0, 0, 0, HInstance, nil);
的时候就出错了,先是发送了一条消息到SocketWndProc所在的消息处理过程,然后又发了一条HWND为0的消息到SocketWndProc,这时处理之后就出错了.请问是什么一回事??
解决方案 »
- StrToFloat 问题,请大家帮忙啊!!!
- 如何在写Delphi语句对adotable中的tablename修改成其他的表?
- 请问哪位大虾有短信开发方面的资料,刚刚进入电讯行业,什么都不会,请大家帮帮忙,谢谢
- 模拟按键问题
- 20分求一个最简单的fastreport的例子
- 哈哈,需要短信网关IP地址及其源代码的快来顶一下。
- 灌水。。。。。。。。。。。。。。。。。。
- 如何去掉字符串中间的空格? 谢谢.
- 公司欠我一个多月的工资,现在突然叫我从DELPHI转去LOUTS,我根本找朋友吃饭请教的钱的都没有,今天竟然催我做
- 过程与函数两者有什么区别?
- 提示"ntdll.dll"地址冲突!
- 问个不该问的问题
begin
TranslateMessage(MsgBlock);
DispatchMessage(MsgBlock);
end;问题是现在我创建窗口时出错.
看你上面的代码分析,创建消息失败的原因主要有
1,registerclass的时候失败。
2,你SocketWndProc的不是标准窗口回调函数,比如不是用stdcall申明。
3,你SocketWndProc处理了WM_NCCREATE消息并返回0,
4,你SocketWndProc处理了WM_CREATE消息并返回-1.
FSocketMsgProcHWND := CreateWindow( 'STATIC','',WS_POPUP, 0, 0, 0, 0, 0, 0, HInstance, nil);
SetWindowLong(FSocketMsgProcHWND, GWL_WNDPROC
,Longint(@SocketWndProc) );
问题又来了,窗口已经创建好,也能接收消息,但我跟踪程序,竟然发现程序处理消息的时候根本没执行过
while GetMessage(MsgBlock,0,0,0) do
begin
TranslateMessage(MsgBlock);
DispatchMessage(MsgBlock);
end;
线程只是在GetMessage那里停住,接收消息时跟本不执行块内的TranslateMessage和DispatchMessage,这我就迷糊了,是什么地方在处理我的消息呢?我又没用MakeObjectInstance(SyncWindowProc)这种方法去处理消息回调函数.消息循环应该不是在主线程里啊.