我是初学者。winapi调用问题(20分)

  • 主题发起人 主题发起人 tianbianfuyun
  • 开始时间 开始时间
T

tianbianfuyun

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟初学
int __stdcall GetTitle(HWND hwnd,LPARAM lParam)
然后调用
EnumWindows(GetTitle,0);
编译时显示
[C++ Error] Unit1.cpp(32): E2034 Cannot convert 'int (__stdcall *)(void *,long)' to 'int (__stdcall *)()'
请指教
 
改成:
EnumWindows( (WNDENUMPROC)GetTitle ,0);
 
接受答案了.
 
我知道是类型不匹配了。
但我在GetTitle函数中输出hwnd,总是1,这怎么回事啊?
 
EnumWindows是把说有顶级窗口罗列出来告诉你的 GetTitle 这个函数
就是说GetTitle会给调用很多次,每次一个窗口
如果你要罗列全部窗口,你要return true
如果你已经找到了你要的窗口,用不着继续罗列窗口了,那么return false;
你可能没写return或者写了return 0,那么只调用了一次就结束了
 
写了的
源代码是这样
BOOL __stdcall GetTitle(HWND hwnd,LPARAM lParam)
{
char temp[100];
GetWindowText(hwnd,temp,100);
Form1->ListBox1->Items->Add(IntToStr(hwnd)+":"+temp);
return true;
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ListBox1->Items->Clear();
EnumWindows((WNDENUMPROC)GetTitle,0);

}
输出是
1:
1:
1:
1:
等等,全是1
 
我这里完全正常,你的代码是直接copy到大富翁来的吗
IntToStr(hwnd)根本不能编译啊,必须 IntToStr((int)hwnd)
所以我很怀疑
 
总算正常了。
我是照着delphi翻译的代码。delphi中完全正常。
翻译成bcb时,编译也可以通过。
我好像记得哪本书上说窗口句柄也是整数存储的,为什么这里要强制转换成整数
不转换就全显示1,而delphi中却不用呢?
不好意思,真麻烦你了
 
后退
顶部