RSS 2.0 Feed
2005-09 Entries
摘要:使用USB存储或者软盘可以在机房和家里的计算机之间传输数据,但是在可以访问因特网的时候,在线存储是更加快捷和便宜的替代方案。典型的在线存储包含MSN 上的“我的网站”、FTP服务,以及基于网页的存储空间。 原文:http://cn.geocities.com/sheng_jiang/accessdocumentsfrominternet.doc 全文阅读:http://spaces.msn.com/members/jiangsheng/Blog/cns!1pVUmC6mid-3zVpLZNQTgtuw!199.entry (英文) 一个飓风刚走,另一个更大的飓风又来了,这回是直冲本州而来。新奥尔良和休斯敦疏散过来一大堆人,但是这里很可能也得疏散。希望休斯敦不会成为第二个新奥尔良。...[阅读全文]

posted @ | Feedback (0) | Filed Under [ 随笔 用户界面 ]

摘要:?MFC提供了许多十分有用的类和对象,在很多时候在Office插件、BHO、常规DLL这样的工程中加入MFC支持是一个不错的选择。但是,MFC中的很多功能,例如资源查找,消息预处理等等都依赖于在进程或者线程创建时被初始化的MFC内部数据;而对于需要添加MFC支持的工程,这些数据并不会被自动地初始化。这时候使用一些MFC的功能,例如使用CString从字符串表加载一个字符串,或者使用CDialog::DoModal()创建一个模态对话框,都会有断言错误,用ATL向导创建的支持MFC的程序也没有多少改善,在CWinApp的DLL版本中没有初始化线程数据,所以调用AfxGetThread会返回空指针。解决这个问题的一个办法是使用AfxBeginThread来启动一个MFC线程,这样MFC会初始化线程相关的数据。在下面的示例中,我在线程初始化时建立了一个模态对话框,以避免直接创建模态对话框会触发的断言失败信息。为了模拟模态对话框的效果,在CDialogThread::WaitForDoModal()这个函数中创建了一个消息循环来等待线程结束,同时用MsgWaitForMultipleObjects来避免死锁。因为MFC中和进程相关的数据并不总是被正确初始化,在调用模态对话框之前也需要手动设置一下。 //如果这段代码可以工作,那么它的作者是Jiangsheng //否则我不知道它的作者 void __stdcall CFrontPageAddin::OnClickButtonExportCHM(IDispatch* /*Office::_CommandBarButton* */ Ctrl,VARIANT_BOOL * CancelDefault) { AtlTrace(_T(" CFPAnt::OnClickButtonExportCHM\n")); //create a thread to avoid assert failure CDialogThread* pDialogThread= (CDialogThread*)AfxBeginThread(RUNTIME_CLASS(CDialogThread), THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED,NULL); if(pDialogThread) { pDialogThread->m_prc=RUNTIME_CLASS(CExportCHMSheet); pDialogThread->ResumeThread(); pDialogThread->WaitForDoModal(); ......[阅读全文]

posted @ | Feedback (1) | Filed Under [ 用户界面 .Net Framework 类库(Library) ]