首页 > 代码库 > 七月工作笔记 7.7 - 7.11

七月工作笔记 7.7 - 7.11



1. vs第二次单步调试崩溃。。
一开始不知道为什么,重装无数次。。后来发现是VAssistX 插件的问题。。。将下载下来的插件包中的VA_X.dll  拷贝到VAssistX 的安装路径下即可。


2. 发现了一个很棒的vs配色方案的网站   http://studiostyl.es/


3. sendmessage和postmessage的区别
PostMessage只负责将消息放到消息队列中,不确定何时及是否处理
SendMessage要等到受到消息处理的返回码(DWord类型)后才继续
PostMessage执行后马上返回
SendMessage必须等到消息被处理后才会返回。


4. MakeLower()函数
像这样改变大小写的函数,除非一下子完全改变,否则现用现改,不要过早调用此类函数。


5. 消息中想要发送字符串,用以下方式
发送端:
CString relatedID = _T("123");
GetParent()->SendMessage(WM_MYHIDE,WPARAM(TRUE),(LPARAM)relatedID.GetBuffer(20));
reatedID.releaseBuffer();
在消息响应端:
void CDrawProgramDoc::SetYcProperty(WPARAM wParam)
{
 CString str((TCHAR*)lParam);
}


6. PostMessage和::PostMessage的区别


PostMessage的定义是这样的:
_AFXWIN_INLINE BOOL CWnd::PostMessage(UINT message, WPARAM wParam, LPARAM lParam)
{ ASSERT(::IsWindow(m_hWnd)); return ::PostMessage(m_hWnd, message, wParam, lParam); }


所以在Release下,它和::PostMessage完全等价,所以能用PostMessage就不要用::PostMessage了,因为前者少一个参数,输入快。以前我也有疑问,以为用PostMessage会损失效率,结果未必,MFC的东西并不总是慢,有些时候他们与API等价的快!


PostMessage:不需要指定接收消息的窗口,但是消息只能发往本窗口
::PostMessage:需要指定接收消息的窗口,但是消息可以发往任意窗口


7. 模态对话框与非模态对话框的区别
一般来说,Windows应用程序中,对话框分为模态对话框和非模态对话框两种。二者的区别在于当对话框打开时,是否允许用户进行其他对象的操作。
模态对话框垄断了用户的输入。当一个模态对话框打开时,用户只能与该对话框进行交互,而其他用户界面对象收不到输入信息。模态对话框下,用户需要操作目标对话框就必须先操作模态对话框。用户对模态对话框的处理如图所示。
模态对话框的处理过程
模态对话框的处理过程
非模态对话框(Nonmodal Dialogue Box,又叫做无模式对话框),与模态对话框不同,当用户打开非模态对话框时,依然可以操作其他窗口。
建立模块对话框通常调用DoModal()这个方法,而非模态对话框则调用Create()和ShowWindow()这两个函数。


8.遇到一个神奇错误。。winocc.cpp 329行
错误本来是这样的,有这么一段代码:
//消息函数
LRESULT CPESetToolDlg::OnSocketGetInstallList(WPARAM wParam, LPARAM lParam)
{
 //发消息给进度条,让他一下子跑完
 PostMessage(WM_PROGRESS_STEP_SEND, PROGESS_RANGE_NUM / 1, 0);
 //定义一个dlg
 CApkInstallDlg apkID;
 apkID.SetApkList((CSTRING_LIST*)wParam);
 //显示dlg
 return apkID.DoModal();
}
单步调试的时候发现,只有在DoModal() 的时候才崩溃,接着调试发现不对,是在消息函数中崩溃的。。后来发现,如果在PostMessage下面让他弹一个框就没问题。。不过还是不知道怎么解决问题,后来发现。是因为消息这个东西,在队列里面,执行顺序很乱,不能用post,所以就改成了send,采用阻塞的方式,。。结果还是不行,后来发现,原来的send之后进入的消息函数里面还有个post。。我想了想。。只好又重写了一个函数。。- -#。。我发现现在我干的最多的事就是重写函数了。


另外有篇文章写得不错,可以看看:http://hi.baidu.com/vc_net/item/82e10f0c4a1e776dd55a113f