先从base读,
clipboard:设计了多个类型的剪贴板操作函数,
Bookmark,files,html,text,data等,接收时是怎么确定类型然后打开的呢?
通过RegisterClipboardFormat注册格式,然后设置数据的时候
::SetClipboardData(format, handle)
读的时候通过IsClipboardFormatAvailable判断是否是某个类型,估计要用循环来确定类型吧?
EXPECT_TRUE(clipboard.IsFormatAvailable(Clipboard::GetUrlWFormatType(), Clipboard::BUFFER_STANDARD));
clipboard.cc
只能globalalloc分配数据,不能globalfree,否则其他线程是拿不到这个剪贴板的数据的,具体的globalfree估计是在emptyclipboard上做的,全局只有这么一个剪贴板,所以如果想不影响系统原来的通讯,需要创建一个虚拟的桌面
CreateWindowStation
CreateDesktop
google怎么用的还没看到,这两个函数具体怎么用?
platform_thread_win.cc
thread,大部分书上介绍说尽量使用__beginthreadex代替createthread,因为那个结构tiddata一是会泄露,2是在创建tiddata之前,程序发生了中断,但是tiddata还没创建,会发生未知错误。但是google还是用了createthread,他的观点是createthread更快,而且在dll编译方式上,dll_thread_detach消息会使程序释放掉tiddata,但是没有设计中断问题,不过对不太注重效率的我来说,还是要尽量避免掉createthread吧,http://www.microsoft.com/msj/1099/win32/win321099.aspx
顺便看了下地址窗口扩展(awe),一个是可以创建非交换内存,2是可以创建超过内存地址空间的内存
win_util.cc
一个shellcreate,很少人写代码会检查失败吧?他这里提供了一个方法OpenItemWithExternalApp
当调用失败并且失败原因是SE_ERR_NOASSOC时,调用shellcreateex来弹出调用程序选择框
还有一些vista下的用法, 不熟悉暂时也不想去了解了
native的就不看了,啥都不懂
另外奇怪的是我这个工程的单元测试是错的,不知道啥原因