MFC笔记
DC,CDC,HDC,CClientDC....有什么本质的区别

Vc中关于DC(设备环境函数(Device Context))的理解问:设备描述表DC是一个什么概念,谁通俗的说说,先谢了学习Vc,首先遇到的就是这个dc,即设置描述表,输出文字,绘图都要用这个,好象它太重要了。
但是我就是不明白,这是什么东西。
一些教程看了,但还是不太了解,谁能通俗的说说,能快速理解它,谢谢。
答:1、作画之前需要准备好画布、画笔、调色板等。
当使用GDI函数如MoveToEx/LineTo, TextOut时,只是告诉系统要划线或写字了,但用什么样的笔(HPEN),字是什么颜色(SetTextColor),画在哪张“纸”(HBITMAP)上需要从一个由系统定义的数据结构中去读取。
这个数据结构被称为Device Context(DC)。
换句话说,GDI函数只是绘画的动作,而DC则保存了绘画所需的材料和工具。
2、设备环境函数(Device Context)设备环境是一个结构,它定义了一系列图形对象及其相关的属性,以及会影响输出结果的绘图方式。
这些图形对象包括:画笔(用于画直线),笔刷(用于绘图和填充),位图(用于屏幕的拷贝或滚动),调色板(用于定义可用的颜色集),剪裁区(用于剪裁和其他操作),路径(用于绘图和画图操作)。
设备环境函数用于对设备环境进行创建、删除或获取信息。
问:DC,CDC,HDC,CClientDC....有什么本质的区别?答:都是DC嘛,HDC就是最原始的DC 句柄,很多API的第一个参数就是一个HDC 类型,比如HDC hDC = ::GetDC( m_hWnd);::MoveToEx( hDC, 0, 0, NULL );::LineTo( hDC, 0, 100, );::ReleaseDC( m_hWnd, hDC );在MFC中,为了将API封装成一个类来操作,因此多出来了一个CDC。
所以在MFC中,都是CDC dc = GetDC();dc.MoveTo( 0, 0 );dc.LineTo( 0, 100 );this->ReleaseDC( &dc );但这样还不够,因为CDC还要你自己去释放,所有MFC中又多出来一个CClientDC, 这样你就可以这样了:CClientDC dc(this);dc.MoveTo( 0, 0 );dc.LineTo( 0, 100 );CClientDC的析构函数自己会释放自己。
VTK学习笔记

VTK学习笔记VTK开发程序能大大缩短图像,图像开发时间,尤其是3维图像图像,那么为何我直至今日还没有真正花费时间去学习VTK开发,与此作一番比较,看看自己是否到底值得花费如此时间?目前,我所使用的3d程序开发主要使用MSVC6以及OPENGL基础上完成,但是opengl 对于三维开发而言是很底层的一个东西,虽然有时底层的东西开发很好用,至少学习使用起来不是那么麻烦,可能就是稍微花费点时间而已,但是当真正用到需要作一些项目或者一些实验的时候,往往弊端就暴露出来了,有时为了实现一个以前实现过的东西,不得不重新书写代码,因为自己在书写代码的时候一般性而言是不会写成标准库那样子的,so一般自己书写的代码只有当时有效,事后只能作为参考的东东而已,而且opengl开发的话,大多很底层的东西大多当时是明白的,过了一段时间之后在回头回去看这些代码的时候,已经分辨不清什么是是么了,如果vtk开发的话,至少使用了标准的库,可能第一次性开发的时间比较长,原因是自己对于VTK的不了解觉,但是一旦掌握这个工具后估计后期开发将会相当的省时间的,关键就是这个前期的学习周期比较长,不知道能不能在有限的时间内搞定下来。
so,vtk的学习现在win平台上操练下然后再考虑移植到linux上继续,呵呵,然学习如何自己封装自己的vtk数据。
安装是个很漫长的过程,cpu连续保持100%负荷运作10多分钟:然后,好不容易把vtk的lib文件全部ok了,然后发现example中的vtkmfc例子不能正常运行,原始是缺失vtkmfc.lib文件,可是该文件并不存在,然后找到了以下这篇faq:Kitware Inc - Leaders in Visualization Technology Search [vtkusers] Problem with finding vtkMFC.libMurat Ahat murat.ahat at Tue Aug 16 11:13:28 EDT 2005Previous message: [vtkusers] Problem withfinding vtkMFC.lib∙Next message: [vtkusers] Where is vtkGLUTesselatorTriangleFilter?∙Messages sorted by:[ date ][ thread ] [ subject ][ author ]∙Previous message: [vtkusers] Problem with finding vtkMFC.lib∙Next message: [vtkusers] Where is vtkGLUTesselatorTriangleFilter?∙Messages sorted by:[ date ][ thread ] [ subject ][ author ]If you don't have VTK download it hereUnzip VTK-4.2-LastestRelease.zip in $LibDir, this will create a new directory $LibDir/VTK otherwise rename it to VTKRun CMake and select the $LibDir/VTK directory as 'Where is the source code' Put the same path + "-VC++" (like Visual C++) as 'Where to build the binaries' Be sure that 'Visual Studio 6' is selected.Check 'Show Advanced Values'.Click on Configure, CMake will ask you to create the VTK-VC++ folderPut setup parameters exactly like that:- BUILD_TESTING = OFF- VTK_USE_ANSI_STDLIB = ON- VTK_USE_HYBRID = ON- VTK_USE_PATENDED = ONClick twice again on 'Configure' and then click on 'OK'. This will generate a Visual C++ project (*.dsw) in $LibDir/VTK-VC++.Launch $LibDir/VTK-VC++/VTK.dsw and compile in RelWithDebInfo mode. To do that, right click on the menu and check 'Build', you can also uncheck 'Build MiniBar'.Then select 'RelWithDebInfo'.Start Compilation with ALL_BUILD------------------------------------------------------------------------------下面继续重新我的安装里程:不管怎样,无论如何,vtk中自带的examples中的sampleMFC没能由编译好的lib文件链接运行,提示缺少vtkFiltering.dll文件等云云,貌似需要动态链接库,于是我查找了半天试修改该工程文件中哪里有引入动态链接库的地方,修改为静态的lib库,因为我好不容易才编译好了lib库文件,(p4 266Ghz的机子大概花费了12min编译完这些文件),最终失败!不得以再次打开cmake再次修改make选项,重新又再次编译成dll动态链接库文件后才算成功了~~晕死了,VTK的安装!!然后仿照那个例子,自己建了一个sdi的mfc程序如下:------------------------------------------------------------------ 另外一个vtk窗口程序,以作为留念:-------------------------------------------------------------------------至此,基本上搞定了VTK的安装,但是如何使用编译好的静态链接库文件书写程序,还有待进一步考究~!------------------------------------------------下面是自己书写的一个最最简单的cone程序:#include "stdafx.h"#include "vtkconesource.h"#include "vtkpolydatamapper.h"#include "vtkactor.h"#include "vtkrenderer.h"#include "vtkrenderwindow.h"int main(int argc, char* argv[]){vtkConeSource *cone=vtkConeSource::New();cone->SetHeight(5);cone->SetRadius(2);cone->SetResolution(100);vtkPolyDataMapper * map=vtkPolyDataMapper::New();map->SetInput(cone->GetOutput());vtkActor *actor=vtkActor::New();actor->SetMapper(map);vtkRenderer * ren=vtkRenderer::New();ren->AddActor(actor);ren->SetBackground(.9,.5,.4);vtkRenderWindow* win=vtkRenderWindow::New();win->AddRenderer(ren);win->SetSize(600,480);while (1)win->Render();return 0;}/*libsincludes:vtkRendering.lib vtkGraphics.lib vtkImaging.lib vtkIO.lib vtkFiltering.l ib vtkCommon.lib vtksys.lib vtkDICOMParser.lib vtkpng.lib vtktiff.lib vtkzlib.l ib vtkjpeg.lib vtkexpat.lib vfw32.lib vtkMPEG2Encode.lib vtkftgl.lib vtkfreety pe.lib opengl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib*/在使用vtkMFCWindow进行vtk+VC MFC开发,重新书写MedPlant程序,目前遇到的问题有:1.如何选择三维场景中的坐标点,已解决,via vtkCellPicker类,2.如何进行三维空间的面裁剪,有待解决;3.vtkMFCWindow好像接收了界面的消息,然后但是并没有share these messages with other windows, such as view frame. in my opinion, one solution is that re-program vtkMFCWindow, for I have the resouce of vtkMFCWindow, but it's not a good idea, for vtkMFCWindow is a standarded C++ class, I should not crack it's intergrality. Second solution is make a subclass of vtkMFCWindow, then remove the msg handle from vtkMFCWindow, make some of mine.Following is some FAQs from VTK forum:-------------------------------------------------------------------------Kitware Inc - Leaders in Visualization Technology Search[vtkusers] Improving interaction with a vtkMFCWindowMark Gooding mark.gooding at Thu Mar 9 10:13:44 EST 2006Previous message: [vtkusers] vtkMFCWindow causing crash in release mode with visual studioNext message: [vtkusers] vtk-paraviewMessages sorted by: [ date ] [ thread ] [ subject ] [ author ]--------------------------------------------------------------------------------Hello all,Sorry for filling your inboxes - I figured it was best to send twoemails becuase my queries were largely unrelated.Ok - so here's the situation: I writing an app using Visual Studio C++using both MFC and VTK. Consquently I'm using the vtkMFCWindow to thethe vtk display. The project extends the vtkSDI example (which mayhave a bearing on how things are done.)I would like to be able to interact with the vtk window as alreadyhappens, but it would also be nice to be able to use keyboard andmouse interaction for other parts of the project.To enable a context menu I created a subclass of thevtkInteractorStyle which then sent the WM_CONTEXTMENU command when the right mouse button was clicked (but not moved). This seemed an oksolution, but isn't very extensible for other interactions. Forinstance I would like to modify my document class when certain keysare pressed, and it seems somewhat long winded for the interactor toget the active document and call the appropriate routine, when itwould be better for the document to handle its own keypress routines.As fas as I see it, the way the messages are handled is as follows;the vtkMFCWindow implements a large number of the standard window message functions. These are then the ones that respond to messages, because the vtkMFCWindow generally has the focus. These functions thencall the appropriate function within the current windowInteractor.Have I understood this right?So what would be the best way to get the vtkMFCWindow to share the messages?? Subclass the vtkMFCWindow and remove it's message handlingand then get the application to handle all messages and pass only the interesting ones (to vtk) to the subclassed vtkMFCWindow? I think thisis primarily a problem for key presses, since the vtkMFCWindow onlyresponds to a small number and it would be nice to use other keys toperform other operations within the application. Most mouseinteraction will probably relate to toolbar work or vtk interactionanyway (i guess).Any thoughts?Cheers,Mark--------------------------------------------------------------------------------Previous message: [vtkusers] vtkMFCWindow causing crash in release mode with visual studioNext message: [vtkusers] vtk-paraviewMessages sorted by: [ date ] [ thread ] [ subject ] [ author ]--------------------------------------------------------------------------------More information about the vtkusers mailing list-------------------------------------------------------------------------------------- Kitware Inc - Leaders in Visualization Technology Search[vtkusers] Improving interaction with a vtkMFCWindowde Boer Ingo I.deBoer at polytec.deThu Mar 9 10:31:37 EST 2006Previous message: [vtkusers] vtkMFCWindow causing crash in release mode with visualstudioNext message: [vtkusers] Improving interaction with a vtkMFCWindow Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]--------------------------------------------------------------------------------Hi,> To enable a context menu I created a subclass of the> vtkInteractorStyle which then sent the WM_CONTEXTMENU commandWhy not creating a context menu via the view class ?> interactions. For instance I would like to modify my document> class when certain keys are pressed, and it seems somewhatWhy not use the OnKey/OnChar from the view class ?> that respond to messages, because the vtkMFCWindow generally> has the focus. These functions then call the appropriateThe focus depends on your programm. Eg, a mouse click setsa focus to a window.> So what would be the best way to get the vtkMFCWindow to> share the messages?? Subclass the vtkMFCWindow and removeThe messages are also send to the view, so they share them alreadygreetsIngo---Dr.-Ing. Ingo H. de BoerPolytec GmbHPolytec-Platz 1-7, 76337 Waldbronn, Germanyphone: ++49 7243 604 106fax : ++49 7243 604 255--------------------------------------------------------------------------------Previous message: [vtkusers] vtkMFCWindow causing crash in release mode with visualstudioNext message: [vtkusers] Improving interaction with a vtkMFCWindow Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]--------------------------------------------------------------------------------More information about the vtkusers mailing list有人写的一个解决方案如下:From: John Platt >Subject: RE: Enabling use a ContextMenu with vtk and MFC (mouse-clickdetection) Newsgroups: erDate: 2006-02-27 22:29:02 GMT (42 weeks, 12 hours and 43 minutes ago)Hi Mark,Have you tried adding an observer to your interactor for the rightbutton press event, something like this in your CView derived class .... MyView.hvtkCallbackCommand* m_vtkMouseEventCBC;static void ProcessMouseEvents( vtkObject* object, unsigned longevent, void* clientdata, void*calldata );MyView.cppm_vtkMouseEventCBC = vtkCallbackCommand::New();m_vtkMouseEventCBC->SetCallback( CMyView::ProcessMouseEvents );m_vtkMouseEventCBC->SetClientData( this );m_vtkInteractor->AddObserver( vtkCommand::RightButtonPressEvent,m_vtkMouseEventCBC, 0.5 );void CMyView::ProcessMouseEvents(vtkObject* vtkNotUsed(object),unsigned long event,void* clientdata,void* callData ){CMyView* self = reinterpret_cast< CMyView*>( clientdata );switch( event ){case vtkCommand::RightButtonPressEvent:TRACE("Right Button Down.\n" );self->DoSomeStuff();// Prevent others from handling this event.self->m_vtkMouseEventCBC->SetAbortFlag(1);break;}}HTHJohn.-----Original Message-----From: vtkusers-bounces+jcplatt= [mailto:vtkusers-bounces+jcplatt= ] On Behalf OfMark GoodingSent: 27 February 2006 10:13To: vtkusersSubject: [vtkusers] Enabling use a ContextMenu with vtk and MFC(mouse-clickdetection)Hello all,A while ago I emailed about trying to set up a ContextMenu when theright mouse button is clicked on the vtkWindow in MFC. The problem wasthat the vtkMFCWindow does not respond to the clicks (despite theexample having a function within it that appears to suggest itshould), instead the mouse action seems to passed directly to the vtkWindowInteractor.To solve this problem I think I should be subclassing vtkWindowInteractorStyle, so that I can either remove the handling ofright mouse click (so that the window handles it) or modify it to passclicks directly to the CView class.Does this sound like a sensible approach? Or is there a better/morestandard solution? I didn't want to set off programming without atleast knowing that I heading in the right direction!Cheers,Mark----------------------------------笔记说vtk的MFC框架编程中遇到的一个问题就是vtkMFCWindow的消息响应问题,现在我找到了一个捷径来解决这个问题,然后这个办法有点傻傻的,但是非常的实用,见上图,我在vtkMFCWindow的窗口里面点击了鼠标,窗口有了WM_LBUTTONDOWN的响应,并且弹出了对话框。
微观经济学笔记

微观经济学笔记CHAP1 概论专一,微观经济学的框架kaoyangj微观经济学说的是关于资源配置的问题。
主要是说资源配置的两个方面:1资源配置的方式(市场还是计划),微观经济学的观点是价格方式,既市场配置资源;2资源配置的效率,这就包括如何使得市场配置有效率的原则,以及原则不可控制之后的:市场失灵。
研这样一来,整个微观经济学为看成了两个部分。
第一部分是2到9章,说的是价格如果配置资源,这包括产品市场和要素市场。
第二部分,则是后面的3章。
共二,微观经济学的研究方法研1,均衡:一般的计算题都是利用均衡条件写出方程式,求的所要求的值. kaoyantj2,边际分析法:边际利益=边际代价655423 17共济概论的内容考试一般不会涉及,但是作为在整体上把握微观经济学还是值得大家注意的。
这对以后理解各个章节之间的联系是有帮助的.共共济网CHAP2 均衡价格理论(D,S,P之间定性,定量的关系)kaoyantj 一均衡价格的决定同济1,注意需求与需求量,供给和供给量的区别(线动还是点动)共济2, 均衡条件:Qs=Qd (注意图解)济二.弹性理论同济1理解弹性的定义,不用死记共XX XX 弹性:前面的是因变量,后面的是自变量。
业2影响需求价格弹性的因素(注意联系实际)471弄3需求价格弹性与总收入的关系kaoyangj例如:谷贱伤农,薄利多销021-4供给价格弹性的影响因素(同样要联系实际)5收入弹性由于恩格尔定律,可以得出农业的发展趋势是向下的三均衡价格理论的应用支持价格与限制价格(自己看书理解吧,由于没办法画图,实在不知道怎么描述)无论是支持价格还是限制价格,都是不改变需求和供给水平,只改变需求量和供求量,即线不动点动。
CHAP3效用论——消费者效用最大化原则一,消费者均衡条件1, 代数分析—-基数论——边际效用分析MU递减规律均衡条件:两个等式,一个是收入限制,一个是性价比2.几何分析——序数论-—无差异曲线消费者偏好:完备性,传递性,单调性。
2022年中级经济师重难点考点笔记

第一章社会主义基本经济制度1.社会主义初级阶段的基本经济制度:以公有制为主体,多种所有制经济共同发展。
2.社会主义初级阶段的收入分配制度:按劳分配为主体,多种分配方式并存3.社会主义市场经济,是指在社会主义公有制基础上,使市场在社会主义国家宏观调控下对资源配置起决定性作用的经济体制。
4.社会主义市场体系的基本特征:统一性;开放性;竞争性;规范性。
5.市场中介组织的作用①非行政监督;②提供服务,节约了交易成本,保证了交易秩序。
第二章市场需求、供给与均衡价格1.需求构成要素:购买欲望+支付能力需求影响因素:消费者偏好、消费者的个人收入、产品价格、替代品价格、互补品价格、预期、其他因素供给影响因素:产品价格、生产成本、生产技术、预期、相关产品价格、其他因素2.需求曲线形状:从左上方向右下方倾斜供给曲线形状:从左下方向右上方倾斜均衡:需求曲线与供给曲线相交3.需求量变动,需求曲线点移动:自身价格因素需求变动,需求曲线线移动:除自身价格以外因素4.最高限价:保护买方利益最低限价:保护卖方利益,常用于支持农业5.弹性计算:变动比例/变动比例点弹性:分母取初始值弧弹性:分母取平均值6.需求价格弹性计算:需求变动比例/价格变动比例影响因素:替代品的数量和相近程度、商品的重要性、商品用途的多少、时间7.供给价格弹性计算:供给变动比例/价格变动比例供给价格弹性影响因素:时间(首要因素)、生产周期和自然条件、投入品替代性大小和相似程度8.弹性与总销售收入关系:富有弹性,Ed>1,价格降低销售收入增加缺乏弹性,Ed<1,价格升高销售收入增加单位弹性,Ed=1,价格变动销售收入不变9.需求交叉弹性计算:B商品需求变动比例/A商品价格变动比例Eij>0替代品;Eij=0无关;Eij<0互补品10.需求收入弹性计算:需求变动比例/收入变动比例Ey>1高档品;0<Ey<1必需品Ey<0低档品;Ey>0正常品第三章生产和成本理论1.经济人假设:生产者或企业的目标是追求利润最大化2.企业形成理论:企业是为了节约市场交易费用或交易成本而产生的3.企业的本质:作为市场机制或价格机制的替代物4.交易费用:(1)签订契约时的偶然因素可能带来的损失;(2)签订契约及监督和执行所花费的成本5.产量位置关系(1)总产量、平均产量、边际产量均为先增后减(2)边际产量为0时,总产量达到最大(3)边际产量穿过平均产量的最高点6.规模报酬:企业内部各种生产要素按照相同比例增加.规模报酬不变/递增/递减:产量增加比例等于/大于/小于/各自生产要素增加比例7.机会成本:当一种生产要素被用于生产单位某产品时所放弃的使用在其他生产用途中所获得的最高收入8.短期成本曲线形状(1)总固定成本:平行于横轴的直线(2)总成本:起点为固定成本,先以递减的增长率上升,后以递增的增长率上升(3)总成本、总可变成本:都上升,相互平行,相差固定成本(4)平均总成本、平均可变成本、边际成本:都是正U型,先减后增(5)平均固定成本:递减(6)边际成本穿过平均总成本、平均可变成本最低点(7)边际成本最早到达最低点第四章市场结构理论1.市场结构类型划分标准:(1)生产者数目;(2)产品差别程度;(3)进入障碍2.完全竞争特征:(1)很多生产者消费者,规模都很小,都是价格接收者;(2)产品是同质的,不存在产品差别;(3)资源自由流动,企业自由进入或退出市场;(4)双方信息都是充分的,决策是理性的3.规模经济:平均总成本随产量扩大而下降4.完全垄断形成条件:(1)政府垄断(邮政);(2)特殊原材料的单独控制(戴比尔斯);(3)专利权;(4)自然垄断(规模经济)5.完全垄断特征:(1)只有一个生产者,是价格决定者,不是接受者;产品没有合适替代品的独特性;(3)其他企业进入这一市场非常困难6.垄断竞争特征:(1)很多生产者和消费者;(2)产品具有差别性;(3)进入或退出市场比较容易、障碍较小7.寡头垄断特征:(1)很少几个企业进行生产;(2)所生产的产品有一定差别或完全无差别;(3)对价格有较大程度的控制权;(4)其他企业进入比较困难8.完全竞争市场中生产者行为(1)行业供给曲线:左上方向右下方倾斜(2)个别企业需求曲线:水平(3)收益曲线:价格=平均收益=边际收益(4)产量决策基本原则:边际成本=边际收益(5)停止生产、营业点:价格P=平均可变成本AVC(6)边际成本曲线=短期供给曲线9.完全垄断市场中生产者行为(1)需求曲线:需求曲线=市场需求曲线(2)边际收益曲线在平均收益曲线下方(3)产量决策原则:边际收益=边际成本10.成本加成定价:P=MC/(1+(1/Ed))11.价格歧视(1)一级:每一单位产品都按照消费者愿意支付的最高价格出售。
OSG学习过程中的笔记

一旋转其中trans->setMatrix(osg::Matrix::translate(0,0,20));就是用来平移物体,这个表示象Z轴正方向平移也就是屏幕正上方。
o sg::Matrix::scale(0.5,0.5,0.5)表示缩放的比例,也就是原来物体的一般大小osg::Matrix::rotate(osg::DegreesToRadians(90.0),0,1,0)该方法参数分别表示角度,x,y,z当xyz其中有值是那么物体会绕着物体旋转。
当角度为正值的时候,物体绕着x,y,z箭头指向向右旋转,否则物体绕着x,y,z箭头指向向左旋转osg笔记(一)2011-07-05 19:37:29| 分类:OSG | 标签:|字号大中小订阅场景图形采用一种自顶向下的,分层的树状数据结构来组织空间数据集,以提高渲染的效率场景图形树结构的顶部是一个根节点,从根节点向下延伸,各个组节点中均包含了几何信息和用于控制其外观的渲染状态信息。
根节点和各个组节点都可以有零个(实际上是没有执行任何操作)或多个子成员。
在场景图形的最底部,各个叶节点包含了构成场景中物体的实际几何信息。
Osg程序使用组节点来组织和排列场景中的几何体。
场景图形通常包含了多种类型的节点以执行各种各样的用户功能,例如开关节点可以设置其子节点可用或不可用,细节层次节点(LOD)可以根据观察者的距离调用不同的子节点,变换节点可以改变子节点几何体的坐标变换状态。
场景图形特征:1. 提供底层渲染API中具备的几何信息和状态管理功能之外,还兼备以下的附加特征和功能:2. 空间结构:3. 场景拣选,投影面剔除和隐藏面剔除。
4. 细节层次:5. 透明6. 状态改动最少化7. 文件I/O8. 更多高性能函数:全特征文字支持,渲染特效的支持,渲染优化,3d模型文件读写支持,跨平台输入渲染及显示设备的访问.场景图形渲染方式:三种遍历操作1. 更新2. 拣选3. 绘制Osg设计所采用的设计理念和工具:Ansi标准C++C++标准模板库设计模式Osg命名习惯:命名空间:小写字母开头,然后大写字母避免混淆。
VC++ 动态添加菜单实例—基于Visual Studio 2010

VC++ 学习笔记—基于Visual Studio 2010 菜单操作之动态添加菜单Author:WukkCreate Date:10/27/2011Version:1.0.0Email:11046064@标题: VC++ 2010动态添加菜单作者:Wukk创建日期:2011-10-27上次更新日期: 2011-10-27版本:1.0(初稿)文档状态修订文档历史记录日期版本说明作者2011-10-27 初稿需要动手实践Wukk2011-**-** 1.0 ****2011-**-** 2.0 ****VC++ 2010动态添加菜单表格1-1 开发环境介绍详细开发过程如下:启动Visual Studio 2010,点击“文件”-->“新建”-->“项目”,在左侧“已安装的模板视图”中选择“Visual C++ ” 节点,选择“MFC”,在右侧视图中选择“MFC应用程序”,编写项目的名称为:AddMenu,如下图所示:点击“确定”按钮,进入“MFC 应用程序向导”页面,点击左侧的“应用程序类型”,在右侧点击“单个文档”单选按钮,选择“项目类型”为“MFC标准”,并将下边的“使用 Unicode 库”前边的对勾去掉(否则在程序中输入中文字符串后,编译时会遇到问题),如下图所示:点击左侧的“用户界面功能”,在右侧的“命令栏(菜单/工具栏/功能区)”中选用“使用经典菜单”,如图所示:其他保持默认,点击“完成”按钮完成项目的创建。
然后在项目的“资源视图”中点击“String table ”节点,资源视图如下图所示:双击“String table”,打开“String table”窗口,添加如下字符串,如图所示:接下来,切换到“类视图”,单击选中“CAddMenuView”类,如下图所示:右键单击该类,打开属性视图,在“消息”选项下选择“WM_RBUTTONDOWN”消息,在右侧添加“OnRButtonDown”函数,如图所示:系统自动定位到添加函数的代码处,在此位置编写代码如下:接下来,为新添加的菜单项添加消息映射,在消息映射处添加菜单ID和响应函数映射,代码如下:在头文件中添加菜单响应函数的定义,如图所示:接下来编写菜单响应函数,代码如下:最后,点击“生成”-->“生成解决方案”,生成成功后,点击“调试”-->“启动调试”,运行项目,在视图右键点击鼠标右键,效果如下所示:点击“确定”按钮,点击菜单栏的视图菜单,看到下拉菜单中出现了动态添加的“动态菜单”,如下图所示:点击“动态菜单”,执行响应函数,看到效果如下:至此,动态添加菜单功能实例结束。
(笔记)CanOpen协议【CanFestival】移植方法支持VC、QT、STM32
(笔记)CanOpen协议【CanFestival】移植⽅法⽀持VC、QT、STM32转⾃/icview-878522-1-1.html前段时间学习了CanOpen协议,到⽹上下载的CanFestival3-10源码,移植到VC、QT、STM32等平台,由于⽹上的资源较少,⾛了不少弯路,移植好使⽤过程中才逐渐暴露出各种问题,⽐如OD字符串传输、⼼跳时间不准确等等,现在已经解决了遇到的所有问题,移植出来的⼯程能够完好⽀持CanOpen协议,花了点时间,整理出⼀个简单易⽤的移植⽅法说明,也写了⼀些⽐较实⽤的调试⼯具,本来还想整理SDO、PDO、EDS⽂件装载等相关知识的,可惜⽐较忙,等什么时候有空了再整理其他的吧!先把移植的贴上来,希望能帮到⼤家。
如果是第⼀次,整个移植过程还⽐较⿇烦,需要有耐⼼,按照下⾯说的⼀步步来肯定可以的,移植成功⼀次后,再移植到其他平台就⾮常轻松了。
到⽹上下载CanFestival源码CanFestival-3-1041153c5fd2,解压出来,并将⽂件夹名字改为CanFestival-3-10,我们移植需要⽤到的源⽂件在CanFestival-3-10\src⽬录下,头⽂件在CanFestival-3-10\include⽬录下。
CanFestival-3-10\src下的⽂件如下图所⽰:CanFestival-3-10\include下的⽂件如下图所⽰:接下来开始移植:步骤⼀:在新建好的⼯程⽬录下新建⽂件夹CanFestival,再在CanFestival下新建⽂件夹driver、inc和src,再在inc⽂件夹下⾯新建stm32⽂件夹(我这⾥主要以移植到stm32为例说明,如果是移植到VC或其他平台下,这⾥也可以命名为其他名字,如vc)。
步骤⼆:将CanFestival-3-10\src⽬录下的dcf.c、emcy.c、lifegrd.c、lss.c、nmtMaster.c、nmtSlave.c、objacces.c、pdo.c、sdo.c、states.c、sync.c、timer.c共12个⽂件拷贝到CanFestival\src⽬录下;将CanFestival-3-10\include⽬录下的所有.h⽂件共19个⽂件全部拷贝到CanFestival\inc⽬录下,再把CanFestival-3-10\examples\AVR\Slave⽬录下的ObjDict.h⽂件拷贝过来,⼀共20个;将CanFestival-3-10\include\AVR⽬录下的applicfg.h、canfestival.h、config.h、timerscfg.h共4个头⽂件拷贝到canfestival\inc\stm32⽬录下;将CanFestival-3-10\examples\TestMasterSlave⽬录下的TestSlave.c、TestSlave.h、TestMaster.h、TestMaster.c拷贝到canfestival\driver⽬录下,并在该⽬录下新建stm32_canfestival.c ⽂件。
VB+ACCESS交通法规模拟考试系统-读书笔记
毕业设计之读书笔记-------Visual C++读与感Vc软件的实用性使得它能够在市场上迅速流行并得到用户的喜爱和认可,该软件功能强大,简单易学,用户可根据它设计和开发功能强大的应用程序.软件实用的另一方面,体现在每个都是结合著者的实际开发经验来进行的,能给用户带来最实用的开发技巧,经验等.本书没有高深的理论描述,而用深入浅出的讲解和简短使用的例子,帮助我们循序渐进的掌握软件最精髓的内容,使我们能够重点掌握,消化吸收,学会开发大型应用程序的方法, 下面详细谈谈VC++6.0一些特点和应用及感受:VC++6.0是微软可视化编程套件Visual Studio(下面简称vs)98中的重要组成部分,这套功能强大的应用程序开发系统是由microsoftc/c++演化而来的,从Microsiftc/c++8.0开始改称Visual c++,发展到今天的Visual c++6.0 .该系统采用的32位编程方式,也就是说其生成的程序是运行在像windows95这样的32位操作系统下通过硬件平台编程,其程序还可以运行在像Alpha、Macintosh等非Intel平台上。
Windows编程采取面向对象编程方法,要编写真正的Windows应用程序,就必须对OOP 有一定的了解。
学习OOP编程方法,有利于了解Visual C++的基础。
MFC提供了一套强有力的C++类,从而能更快地学习使用MFC编程。
要学习vc++,我们当然就要涉及面向对象,而面向对象程序设计并不是新事物,只不过人们渐渐认识它是从C++开始的。
面向对象程序设计语言的鼻祖是Smalltalk语言,这种语言产生于70年代,但并未流行起来。
只到近来,随着新的计算机语言的发展而发展起来。
在现实生活中,人们对客观事物不同方面的性质各有兴趣。
一个组装计算机的人可能只对CPU、板卡和外部设备的质量、功能感兴趣,而他对这些物品的制造过程不感兴趣,可能对其中涉及到的集成电路更不感性趣。
北京大学金融学考研重难点笔记
北大、人大、中财、北外、中传教授创办集训营、一对一保分、视频、小班北京大学金融学考研重难点笔记
要素市场的均衡厂商使用生产要素的原则(应对计算题)
产品市场
要素的边际收益=边际成本要素市场完全竞争
MRP L =VMP L =w=MFC
L =AFC L 完全竞争完全竞争
MRP L =VMP L =MFC L 不完全竞争不完全竞争
MRP L =w=MFC L =AFC L 完全竞争不完全竞争MRP L =MFC L 不完全竞争
由单个厂商要素需求曲线到要素市场的需求曲线(完全竞争下)
VMP=MP VMP=MP.
.P (VMP L 与单个厂商对要素的需求曲线d 相重合)
重合的条件:A 当w 变化的时候,产品市场的价格不变。
B 当w 变化的时候,L 和K 之间不存在替代关系。
2.从单个厂商到整个市场对要素的需求曲线
不能简单地加总,因为对整个市场来说,
w 变动会导致L 、K 的变动。
一方面MPL 的变动影响VMPL ,另外一方面导致产量Q 的变动从而使P 变动从而影响VMPL 。
所以,不能简单地加总,而是要用调整后的需求曲线dm ,再加总得到要素市场的需求曲线。
A 当w 变化时,P 不变,且L 和K 不存在替代关系,市场的需求曲线就是把单个厂商要素需求曲线水平加总。
B 当w 变化时,P 变化,但是L 与K 不存在替代关系
我们把调整后得到的dm 水平加总就是市场对要素的需求曲线。
VC++局域网上交互式教学管理系统-读书笔记
文献综述(读书笔记)1. <Windows Sockets 网络程序设计大全>蒋东兴,林鄂华,印敏,陈棋德,刘启新编著,清华大学出版社 1999.4Widows Sockets是Berkeley Sockets在Windows环境下的扩充,它为Windows 下网络异步通信提供了一种方便的开发和运行环境,现在,Windows Sockets已经成为Windows下标准的网络程序设计接口,Windows下各种开发平台都支持Windows Sockets上的网络程序设计,提供了网络编程接口,Berkeley Sockets网络编程原理,Windows Sockets 1.1程序设计原理,应用实例与库函数参考,Windows Sockets 2的扩充特性,应用实例与库函数参考,MFC Sockets程序设计原理与实例,在本系统开发过程中和完成论文过程中主要用到了以下章节的内容第一章TCP/IP简介第二章套接字编程原理第三章Windows Sockets 1.1程序设计第四章Windows Sockets 1.1应用实例第五章Windows Sockets 1.1库函数第九章MFC Sockets 程序设计2. <Visual C++图形用户界面开发指南> 李博轩等编著清华大学出版社2001.11本书通过大量实例深入浅出地介绍了Visual C++图形用户界面开发技术,对Windows界面中重要的组成元素分别进行了介绍,本书共有10章,在每章中,对每种编程技术都给出了具有代表性的应用实例,在完成本系统和论文期间,我用到了其中的以下章节.第一章Windows 用户界面制作基础第二章按钮控件第三章菜单第四章工具栏第十章框架窗口3. 实用软件工程郑人杰等编著,清华大学出版社,1997.4本书从软件的开发,维护和软件的管理等方面系统地阐述了软件工程的基本概念和常用的方法,在软件的开发过程中和写论文中主要用到了本书中的以下几部分,具体如下:第二章系统分析第三章软件需求分析附录计算机软件开发文档编写指南。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1. 窗口是屏幕上的一块矩形区域,是Windows应用程序与用户进行交互的结构。利用窗口,可以接收用户的输入,以及显示输出。 2. 在windows应用程序中,窗口是通过窗口句柄(HWND)来标识的。我们要对某个窗口进行操作,首先就要得到这个窗口的句柄。句柄(HANDLE)是Windows程序中一个重要的概念。在Windows程序中,有各种各样的资源(窗口、图标、光标等)。系统在创建这些资源时会为它们分配内存,并返回标识这些资源的标识号,即句柄。 3. 消息:在Windows程序中,消息是由MSG结构体来表示的。MSG结构体的定义如下: TypedefstructtagMSG{ HWND hwnd;//表示消息所属的窗口。在windows程序中,用HWND类型的变量来表示窗口 UINT message;//消息的标识符。在windows中,消息是由一个数值来表示的。不同的消息对应不同的数值。在程序中通常使用WM_XXX宏的形式来使用消息的 WPARAM wParam;//用于指定消息的附加信息。当我们收到一个字符消息的时候,message成员变量的值就是WM_CHAR,但用户到底输入的是什么字符,就由wParam和lParam来说明, LPARAM lparam;// DWORD time;//消息投递到消息队列中的时间 POINT pt;//鼠标的当前位置 }MSG; 4. WinMain是Windows程序的入口点函数,与DOS程序的入口点函数main的作用相同,当WinMain函数结束或返回时,Windos应用程序结束。 5. 编写一个完整的Win32程序,该程序实现的功能时创建一个窗口,并在该窗口中相应键盘及鼠标消息。程序实现的步骤为:①WinMain函数的定义②创建一个窗口③进行消息循环④编写窗口过程函数 6. 在C++中,//用于注释一行 /* */用于注释多行 7. 结构体在默认的情况下,其成员是公有的;类默认情况下,其成员是私有的。 8. 当一个类的对象超出它的作用范围,对象所在的内存空间被系统回收,或者在程序中用delete删除对象时,西沟函数将自动被调用。对一个对象来说,析构函数是最后一个被调用的成员函数。 9. C++的多态性用一句话概括就是:在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时竟会根据对象的实际类型来调用相应的函数。如果对象类型时派生类,就调用派生类的函数;如果对象类型时基类,就调用基类的函数。 10. MFC是开发Windows应用程序的C++接口。 11. 在MFC中,类的命名都已C开头。对于一个单文档应用程序即Single document,都有一个CMainFrame类,一个C+工程名+App为名字的类,一个C+工程名+Doc为名字的类,一个C+工程名+View为名字的类。 12. F9 设置断点 F5:跳到断点 F10:单步调试 F11:进入函数 13. MSG的结构体的定义如下: typedefstructtagMSG { HWND hwnd;//表示消息所属的窗口 UINT message;//指定了消息的标识符 WPARAM wParam;// LPARAM lParam;// DWORD time;// POINT pt;// } MSG, *PMSG, *LPMSG; 14. 创建一个窗口,并在该窗口中响应键盘及鼠标消息,程序实现的步骤为:①WinMain函数的定义②创建一个窗口③进行消息循环④编写窗口过程函数 15. 创建一个完整的窗口,需要经过下面几个操作步骤 ① 设计一个窗口类 ② 注册窗口类 ③ 创建窗口 ④ 显示及更新窗口 16. #include #include
LRESULT CALLBACK WinSunProc( HWND hwnd,//窗口句柄 UINT uMsg,//消息代码 WPARAM wParam,//消息代码的附加参数 LPARAM lParam// );
//WinMain函数的定义 int WINAPI WinMain( HINSTANCE hInstance, //改程序当前运行的实例句柄,这是一个数值 HINSTANCE hPrevInstance,//当前实例前一个实例的句柄,在win32环境下,这个参数不再起作用 LPSTR lpCmdLine, //空终止的字符串,指定传递给应用程序的命令行参数。 intnCmdShow //指定程序的窗口应该如何显示,例如:最大化,最小化,隐藏等。 ) { //设计一个窗口类 WNDCLASS wndcls; wndcls.cbClsExtra=0; wndcls.cbWndExtra=0; wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);//指定窗口类的背景画刷句柄,由于GetStockObject函数可以返回多种资源对象的句柄,在实际条用该函数前无法确定它返回哪一种资源对象的句柄,因此需要进行类型转换 wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);//指定窗口类的图标句柄 wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);//指定窗口类的光标句柄 wndcls.hInstance=hInstance;//指定包含窗口过程的程序的实例句柄 wndcls.lpfnWndProc=WinSunProc;//一个函数指针,指向窗口过程函数,窗口过程函数是一个回调函数 wndcls.lpszClassName="sunxin20012";//指定窗口的名字 wndcls.lpszMenuName=NULL;//空终止的字符串,指定菜单资源的名字 wndcls.style=CS_HREDRAW|CS_VREDRAW;//指定窗口类型的样式 RegisterClass(&wndcls);//注册窗口
HWND hwnd; hwnd=CreateWindow("sunxin20012","http://www.sunxin.org",WS_OVERLAPPEDWINDOW,0,0,600,400,NULL,NULL,hInstance,NULL); //"sunxin20012" 窗口类的名字 "http://www.sunxin.org"窗口的名字 //WS_OVERLAPPEDWINDOW 创建窗口的样式 //0,0,600,400 分别表示指定窗口的左上角的x,y坐标,窗口的宽度,高度。 ShowWindow(hwnd,SW_SHOWNORMAL); UpdateWindow(hwnd);
MSG msg; while(GetMessage(&msg,NULL,0,0))//参数意义分别为:指向一个消息的结构体;指定接收哪一个窗口的消息;指定要获取的消息的最小值,通常设为0;指定要获取的消息的最大值,通常设为0 {TranslateMessage(&msg); DispatchMessage(&msg);}//分派一个消息到窗口过程,由窗口过程对消息进行处理。 return 1;
}
LRESULT CALLBACK WinSunProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) {switch(uMsg) { case WM_CHAR: charszChar[20]; sprintf(szChar,"char code is %d",wParam); MessageBox(hwnd,szChar,"char",0); break; case WM_LBUTTONDOWN: MessageBox(hwnd,"mouse clicked","message",0); HDC hdc; hdc=GetDC(hwnd); TextOut(hdc,0,50,"程序员之家",strlen("程序员之家")); break; case WM_PAINT: HDC hDC; PAINTSTRUCT ps; hDC=BeginPaint(hwnd,&ps); TextOut(hDC,0,0,"http://www.sunxin.org",strlen("http://www.sunxin.org")); EndPaint(hwnd,&ps); break; case WM_CLOSE: if(IDYES==MessageBox(hwnd,"是否真的结束","message",MB_YESNO)){DestroyWindow(hwnd);} break; case WM_DESTROY: PostQuitMessage(0); break; default: returnDefWindowProc(hwnd,uMsg,wParam,lParam); }return 0;} 16. MFC采用面向对象设计,将大部分的Windows API封装到C++类中,以类成员函数的形式提供给程序开发人员调用。 17. Win32SDK应用程序是由实例句柄(WinMain函数的参数hInstance)来标识的。而对MFC程序来说,通过产生一个应用程序类的对象来唯一标识应用程序的实例。每一个MFC程序有且仅有一个从应用程序类(CWinApp)派生的类。每一个MFC程序实例有且仅有一个该派生类的实例化对象,也就是theApp全局对象。该对象就表示了应用程序本身。 18. 在MFC中,以Afx为前缀的函数都是全局函数,可以在程序的任何地方调用它们。 19. 静态函数中不能访问非静态的成员变量或方法。 20. 静态变量必须初始化。 21. 前缀带afx的函数,指的是应用程序框架的函数。 22.