我该把Widget放在哪?
来源:互联网 发布:max384灯控台编程教程 编辑:程序博客网 时间:2024/04/29 16:55
这一周做一个新任务,请第三方公司做了一个桌面,我们想把Yahoo Widget放到桌面上面,我稀里糊涂的摆弄了一周,也不知道是不是走了弯路,先记录下来,以后想起来在看看吧。
首先想到的就是用SetWindowPos把Widget窗口放到TOPMOST,用spy测了半天,大概明白了原来父窗口和所有者窗口不完全一样,SetParent/GetParent和GetAncetor也有些很微妙的差别。以前一直是做Windows Mobile,小小的窗口很难跑一大堆层次复杂的窗口程序,所以一直没碰到过这个问题。查了一些资料,大概是说父(子)窗口描述窗口的层次关系,便于Windows窗口管理器管理(怎么管理,什么算法?),所有者窗口负责消息的传递(怎么传递,什么算法?)。CreateWindowEx函数中的hParent参数对于WS_POPUP类型的窗口就有特殊的身份了。任务进度关系,就不求甚解了。
Yahoo Widget可以选择设置为保持在所有窗口最下面,实际上就是设置其为桌面的子窗口。这个时候即使设置为TopMost也不会出现在其它窗口上面。于是又找到了SetParent函数把Widget设置为自己的伪桌面的子窗口,只要伪桌面在上面,Widget就在上面。
可是不知道该在什么时候做这项工作,如果用一个Timer不停探测,实在浪费能源。所以又想着用钩子函数钩Widget。大学的时候倒是看过不少写键盘记录器的教程,不过重来没实践过。翻来覆去看MSDN那几个函数的说明,大概作了一个,钩住Widget的过程函数,然后……,我又不知道拦截什么消息确定Widget被下放到桌面子窗口了,于是用机械的用spy测了一天,没有结果,一狠心,把钩子放到Show消息里面了。愿程序之神原谅我,好像最后的方案只不过是用了一个高超而隐晦的技巧,仍然是做浪费能源的事情。
任务过程中,又了解了不少知识的皮毛。不知道这些知识到了Windows 7还能用不。特别是在网上搜到一些虚拟桌面的技巧,好像还挺好玩,等有空的时候尝试一下。很多东西,难者不会,会者不难。可是,这些在系统中到处打洞补漏的活,实在又脏又累,虽说window不开源,但幸运的是后它还就只用那些函数接口,做不来也就可以搪塞上面了。到了Linux下面,只有想不到,没有做不到,嘿嘿,没有任何借口,那才是无间道呢。
- 我该把Widget放在哪?
- inline:我应该把你放在哪?
- react设计中,什么时候该把数据放在组件,什么时候该放在store中
- Java中的常量该放在哪?
- C/C++:我应该把星号放在什么地方?
- 在使用stringstream读文件行时,要注意把该对象放在循环内
- 是该时候收拾好心情.. 把心完全放在学习上..
- phpcmsv9 把phpcms程序放在子目录里如果生成首页到跟目录该怎么办?
- altium designer里把贴片元器件放在底层该如何去设置操作?
- 该把JS文件放在HTML文档的那个位置
- 判断图标是否在该widget内
- 我只想把好的东西放在找得到的地方!
- 监听管道 线程该放在何处
- script标签到底该放在哪里
- script标签到底该放在哪里
- 给我放在中间
- 把满腔的怒火放在这里
- 把表单放在屏幕的正中央
- 理解Windows消息机制
- C/C++各种排序法
- 今天头有点疼,看显示器的时间确实有些长了
- C/C++建树和遍历
- Android 图片切换,ImageSwitcher 学习
- 我该把Widget放在哪?
- 我的博客开通了
- 在成长路上迷茫!!
- 在对话框(CDialog)中使用分割窗(CSplitterWnd)
- Korn Shell Notes(IV)
- 守护进程
- 摘录论坛有用东西
- C/C++单词倒转/反转
- malloc,new,VirtualAlloc,HeapAlloc性能(速度)比较