有没有可能不调用CreateWindow而能够创建窗体的?

claider 2007-01-15 12:57:59
最近在研究miranda IM的代码(纯Win32写的),发现无论如何找不到创建主窗体的语句,也找不到对应的对话框资源,非常奇怪,发现该代码总是在注册Wnd之后调用一个叫CallService的函数,跟进去之后发现也没有CreateWindow
另外发现代码中Hook的使用非常多,请问有没有不用CreateWindow而,只用hook创建窗体的方式?

欢迎共同学习,msn:zo1_zyy@hotmail.com
...全文
4555 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiushuitian 2007-05-22
  • 打赏
  • 举报
回复
自己画一个..
nanjingxinxi 2007-04-14
  • 打赏
  • 举报
回复
我也是新手啊,向大家学习啦
叶子海盗 2007-04-09
  • 打赏
  • 举报
回复
学习.
Olive2008 2007-01-26
  • 打赏
  • 举报
回复
(刚开始学习MFC编程……)
Learn from you!
aceouter 2007-01-17
  • 打赏
  • 举报
回复
有些意思
sirguan 2007-01-16
  • 打赏
  • 举报
回复
不可能不调用createwindow的,就算是dialogbox也要调用的。用调试器下端点看看就知道了。
好像菜单也得调用createwindow。
sxcong 2007-01-16
  • 打赏
  • 举报
回复
你有没有看代码啊,程序一开始就CreateWindowEx创建空的主窗口,然后创建窗口,再创建List窗口。连续用了三个,你怎么说没用呢?
fox1999 2007-01-16
  • 打赏
  • 举报
回复
我看看源码? 哪里有?q
czp_opensource 2007-01-16
  • 打赏
  • 举报
回复
DialogBox
DialogBoxParam
DialogBoxIndirect
DialogBoxIndirectParam
东文-桑晨 2007-01-16
  • 打赏
  • 举报
回复
这样还是一样使用 CreateWindow。
你的程序里面搜索就没有 CreateWindow相关字样吗?
claider 2007-01-16
  • 打赏
  • 举报
回复
回复人:yjgx007(还不结帖?!听妈妈的话! http://www.geekclaw.com) ( 一星(中级)) 信誉:88 2007-1-15 21:47:02 得分:0
?

user32.dll中转出了API函数CreateWindow, CreateWindowEx , etc.
通过LoadLibrary.dll加载user32.dll得到模块hModule,然后用GetProcAddress(hModule, "CreateWindow")得到API函数地址,最后调用它!
----------------------------
这个倒没有想到,学习一下!谢谢
flying_knife 2007-01-16
  • 打赏
  • 举报
回复
someone 2007-01-16
  • 打赏
  • 举报
回复
嘿嘿,我没有编译,直接用windows搜索了一下就出来了
claider 2007-01-16
  • 打赏
  • 举报
回复
To someone(阿风) :你编译这么顺利?没有碰到什么问题么?
我碰到了下面这个问题,手工解决了。
http://community.csdn.net/Expert/TopicView.asp?id=5276835
claider 2007-01-16
  • 打赏
  • 举报
回复
cli.hwndContactList = CreateWindowEx(
DBGetContactSettingByte(NULL, "CList", "ToolWindow", SETTING_TOOLWINDOW_DEFAULT) ? WS_EX_TOOLWINDOW : 0,
_T(MIRANDACLASS),
/*titleText*/"Hello zyy!",
(DBGetContactSettingByte(NULL, "CLUI", "ShowCaption", SETTING_SHOWCAPTION_DEFAULT) ?
WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX : 0) | WS_POPUPWINDOW | WS_THICKFRAME | WS_CLIPCHILDREN,
(int) DBGetContactSettingDword(NULL, "CList", "x", 700),
(int) DBGetContactSettingDword(NULL, "CList", "y", 221),
(int) DBGetContactSettingDword(NULL, "CList", "Width", 108),
(int) DBGetContactSettingDword(NULL, "CList", "Height", 310),
NULL, NULL, cli.hInst, NULL);

clist\clui.c 中 line327,我把Caption改成自己名字了,呵呵。
claider 2007-01-16
  • 打赏
  • 举报
回复
回复人:someone(阿风) ( 二级(初级)) 信誉:100 2007-01-16 13:19:36 得分:0
?
刚下载了一个看了看,miranda.c的LoadSystemModule()函数里就有啊:
hAPCWindow=CreateWindowEx(0,_T("STATIC"),NULL,0, 0,0,0,0, NULL,NULL,NULL,NULL); // lame

其它还有几个文件里也有。
-------------------------------------------
不是在这里,我找到了,等一下帖出来。
是因为Source Insight 对“CreateWindow”搜索并不包含CreateWindowEx,很奇怪。
不过后来我单步调试找到了,如果结贴的话。诸位大虾所述的高级工具就不会出现在本贴了,嘿嘿。
wangweixing2000 2007-01-16
  • 打赏
  • 举报
回复
插件窗口也只是把创建窗口的api移到了插件的实现中去了,最终都还是要有的。
其实有个好办法,如果那个代码可以编译通过,你用WindDBG调试一下就知道在哪里了,这支断点在CreateWindowEx和CreateWindow上就可以了。
someone 2007-01-16
  • 打赏
  • 举报
回复
刚下载了一个看了看,miranda.c的LoadSystemModule()函数里就有啊:
hAPCWindow=CreateWindowEx(0,_T("STATIC"),NULL,0, 0,0,0,0, NULL,NULL,NULL,NULL); // lame

其它还有几个文件里也有。
大熊猫侯佩 2007-01-15
  • 打赏
  • 举报
回复
在ollydbg中断全部Window API 看看结果
WingForce 2007-01-15
  • 打赏
  • 举报
回复
也可以自己画个矩形当窗体用滴,如果不怕效率差和麻烦的话
加载更多回复(8)

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧