张明奇(卡哥)
通知消息(Notification message)是指这样一种消息,一个窗口内的子控件发生了一些 事情,需要通 知父窗口。通知消息只适用于标准的窗口控件如按钮、列表框、组合框、编辑框,以及 Windows 95公 共控件如树状视图、列表视图等。例如,单击或双击一个控件、在控件中选择部分文本 、操作控件的 滚动条都会产生通知消息。 按扭 B N _ C L I C K E D file://用户单击了按钮 B N _ D I S A B L E file://按钮被禁止 B N _ D O U B L E C L I C K E D file://用户双击了按钮 B N _ H I L I T E file://用户加亮了按钮 B N _ PA I N T按钮应当重画 B N _ U N H I L I T E加亮应当去掉 组合框 C B N _ C L O S E U P组合框的列表框被关闭 C B N _ D B L C L K用户双击了一个字符串 C B N _ D R O P D O W N组合框的列表框被拉出 C B N _ E D I T C H A N G E用户修改了编辑框中的文本 C B N _ E D I T U P D AT E编辑框内的文本即将更新 C B N _ E R R S PA C E组合框内存不足 C B N _ K I L L F O C U S组合框失去输入焦点 C B N _ S E L C H A N G E在组合框中选择了一项 C B N _ S E L E N D C A N C E L用户的选择应当被取消 C B N _ S E L E N D O K用户的选择是合法的 C B N _ S E T F O C U S组合框获得输入焦点 编辑框 E N _ C H A N G E编辑框中的文本己更新 E N _ E R R S PA C E编辑框内存不足 E N _ H S C R O L L用户点击了水平滚动条 E N _ K I L L F O C U S编辑框正在失去输入焦点 E N _ M A X T E X T插入的内容被截断 E N _ S E T F O C U S编辑框获得输入焦点 E N _ U P D AT E编辑框中的文本将要更新 E N _ V S C R O L L用户点击了垂直滚动条消息含义 列表框 L B N _ D B L C L K用户双击了一项 L B N _ E R R S PA C E列表框内存不够 L B N _ K I L L F O C U S列表框正在失去输入焦点 L B N _ S E L C A N C E L选择被取消 L B N _ S E L C H A N G E选择了另一项 L B N _ S E T F O C U S列表框获得输入焦点 CString str=""; //如果工程设置使用多字节字符集,是正确的;使用unicode字符集,则是错误的 CString str=''; //错误 CString str=NULL;//错误 CString str; str.Empty(); //正确,但Empty调用多余 CString str; //这样就初始化为空了,因为默认构造函数会被调用,默认构造函数所做的就是初始化为空串 使用中途要清空可以这样写: str.Empty(); 或者str = _T(""); 这2种都是多字符集和unicode字符集通用写法。 AfxGetResourceHandle(); AfxSetResourceHandle(HINSTANCE xxxx); AfxGetResourceHandle()用于获取当前资源模块句柄,而AfxSetResourceHandle则用于设置 程序目前要使用的资源句柄。 /// GetModuleHandle 得到模块的句柄。参数为模块的名称, 比如 abcd.dll(也可能有.exe,不过较少)。 如果参数为NULL,表示取当前进程(.exe) 的模块句柄模块句柄实际上就是模块在当前进程空间的装入地址。 exe程序装入句柄一般为 0x00400000 ERROR_IO_PENDING错误 重叠I/O返回的标志啊。表示现在等待I/O,稍后就会返回 重叠模型里面的WSA_IP_PENDING错误很正常。 重叠I/O的事件通知方法要求将windows事件对象与WSAOVERLAPPED结构关联在一起,若是使用一个WSAOVERLAPPED结构, 发出I/O调用时会立即返回,通常会返回WSA_IP_PENDING错误,意味着I/O操作正在进行。 稍后的某个时间,应用程序需要等候与WSAOVERLAPPED结构相关联的事件对象,判断某个重叠I/O请求何时完成。 /// 初始化和赋值有什么区别 初始化与赋值是不同的概念:静态变量的初始化是在编译时进行,变量的赋值是在函数或程序运行时进行。 静态变量只初始化一次,但可以通过赋值的方式多次修改静态变量的值。 // OnDraw函数是系统什么时候调用的? 由于,程序初始化时,会调用ShowWindow以及UpdateWindow,而UpdateWindow会发送一个WM_PAINT消息给系统, 因此,你加在OnDraw中的断点会在初始化时生效,又由于,AppWizard生成的程序框架中包含许多涉及发送WM_PAINT消息的函数, 比如,当你调整窗口大小,使得客户区中的显示内容改变时,窗口的OnSize函数会发送WM_PAINT消息,此时OnDraw会被调用。 所以,在客户区的显示内容改变,客户区的大小改变,客户区由隐藏到显示,以及诸如此类使客户区内容改变的操作, 都会发送WM_PAINT消息,从而调用OnDraw。 / 如何屏蔽鼠标中间键???mfc 一个list控件中会有垂直滚动条,现在我不想用鼠标中间键来下来滚动!!如何才能屏蔽它???? BOOL CMyListCtrl::PreTranslateMessage(MSG* pMsg) { // TODO: 在此添加专用代码和/或调用基类 if(pMsg->message == WM_MOUSEHWHEEL) { return TRUE; } return CListCtrl::PreTranslateMessage(pMsg); } ------解决方案-------------------------------------------------------- 你在派生类中重写ON_WM_MOUSEWHEEL()给一个空事件就完了 svn软件开发管理软件。要删除已提交的文件,那么就是空提交此文件,就可以了。 如:mage文件,当给名为magee时,在提交,就删除了mage了。 如何选择同步对象 1,如果应用程序在它能够访问某一资源之前,需要等待某一事件发生或完成,那么,这时就应该考虑用事件对象。 2,如果同一个应用程序中有多个线程要同时访问同一个资源,应该考虑使用信标对象。 3,如果多个应用程序要同时使用一个资源,则应该考虑使用互斥量。 4,如果不是上面所述任何一种情况,可以考虑使用关键代码段。 /// Virtual C++ 中Resources视图的string table作用是什么啊? IDR_MAINFRAME 这个标识符 不仅用来指定应用程序的字符串,还标识了应用程序的图标、工具条资源和菜单。 应用程序向导 生成了这些资源,而你可以用资源编辑器对它们进行修改维护操作。- -------就是说 应用程序向导 生成了 以 IDR_MAINFRAME 命名的资源,各个种类都有(书上还漏写了 快捷键 资源) -------String Table 是字符串表。 其中是这个程序所要显示的那些文本。 包括在状态条里显示的、消息框显示的…… 在程序中只是加载它们。这样使以后修改起来比较方便。 /// GDI+画扇形 //Pen pen(m_clOutLine, m_nOutLineWidth); //graphics.DrawPolygon(&pen,m_pCoordinateDataPoint1, luBezierCurvePointNum); //if (m_bFill) //{ // SolidBrush solidBrush(Color(80, 255, 180, 255)); // graphics.FillPolygon(&solidBrush,m_pCoordinateDataPoint1, luBezierCurvePointNum); //} //double ROne = g_p2DView->m_Map.GeoMetric2Pixel(30 * 1000); //距离转换为平面象素 //double RTwo = g_p2DView->m_Map.GeoMetric2Pixel(45 *1000); //pDC->MoveTo(pt[0]); //pDC->LineTo(pt[1]); //CRect rectA(pt[0].x - ROne,pt[0].y - ROne,pt[0].x + ROne,pt[0].y + ROne); //pDC->MoveTo(pt[2]); //pDC->ArcTo(rectA,pt[2],pt[1]); //pDC->MoveTo(pt[2]); //pDC->LineTo(pt[3]); //CRect rectB(pt[0].x - RTwo,pt[0].y - RTwo,pt[0].x + RTwo,pt[0].y + RTwo); //pDC->MoveTo(pt[4]); // pDC->ArcTo(rectB,pt[4],pt[3]); //pDC->MoveTo(pt[4]); //pDC->LineTo(pt[5]); //pDC->MoveTo(pt[6]); //pDC->ArcTo(rectA,pt[6],pt[5]); //pDC->MoveTo(pt[6]); //pDC->LineTo(pt[0]); //g_p2DView->m_Map.GeoConvXY2Screen(&ptCenter,posCenter.x,posCenter.y); //经纬度转换为屏幕坐标 //double r = g_p2DView->m_Map.GeoMetric2Pixel(d1 * 1000); //距离转换为平面象素 //绘制标牌背景[lv 1/2/2010] //Graphics graphics(pDC->m_hDC); //SolidBrush solidBrush(Color(m_byLabelTrans, 255, 255, 255)); //Brush *cloneBrush = solidBrush.Clone();// //graphics.FillRectangle(cloneBrush, x2 - 5,y2 - 3, unMaxLen*BiaoPai_CharX - 2, nDisRows*BiaoPai_CharY + 3);// //Color gdipColor(m_byLabelTrans, 0, 0, 255); //unsigned long gdiColorRef = m_clLabel; //gdipColor.SetFromCOLORREF( gdiColorRef ); //Pen pen(Color(255,255,255,255)); //graphics.DrawPie(&pen,ptCenter.x,ptCenter.y,r,r,0,2*dAngle1); //pDC->MoveTo(ptCenter); //pDC->AngleArc(ptCenter.x,ptCenter.y,r,0,2*dAngle1); //PointF *points = new PointF[7]; //for (int i = 0; i < 7; i++) //{ // points[i].X = pointList[i].x; // points[i].Y = pointList[i].y; //} //Color tmpColor; //tmpColor.SetFromCOLORREF(FillColor); //ARGB argb = Color::MakeARGB(m_byTrans, tmpColor.GetR(),tmpColor.GetG(),tmpColor.GetB()); //HatchBrush hBrush((HatchStyle)FillMode, Color(argb), Color(argb)); //graphics.FillPolygon(&hBrush,points,num); /