博文

VC++快捷键大全(2008-03-11 12:24:00)

摘要: 当前位置:主页>技术资讯>网络安全 >文章内容 VC++快捷键大全  来源: 作者: 发布时间:2005-01-31   “华夏名网” http://www.sudu.cn 和 http://www.bigwww.com 是成都飞数科技有限公司的网络服务品牌,专业经营虚拟主机,域名注册,VPS,服务器租赁业务。公司创建于2002年,经过近5年的高速发展,“华夏名网”已经成为我国一家知名的互联网服务提供商,被国外权威机构webhosting.info评价为25大IDC服务商之一。
F1: 帮助
Ctrl+O :Open
Ctrl+P :Print
Ctrl+N :New
Ctrl+Shift+F2 :清除任何书签
F2 :上一个书签
Shift+F2 :上一个书签
Alt+F2 :编辑书签
Ctrl+F2 :添加/删除一个书签
F12 :Goto definition
Shift+F12 :Goto reference
Ctrl+'Num+' :Displays the next symbol definition or reference
Ctrl+'Num-' :Displays the previous symbol definition or reference
Ctrl+J/K :寻找上一个/下一个预编译条件
Ctrl+Shift+J/K :寻找上一个/下一个预编译条件并将这一块选定
Ctrl+End :文档尾
Ctrl+Shift+End :选定从当前位置到文档尾
Ctrl+Home :文档头
Ctrl+Shift+Home :选定从当前位置到文档头
Ctrl+B/Alt+F9 :编辑断点
Alt+F3/Ctrl+F :查找
F3 :查找下一个
Shift+F3 :查找上一个
Ctrl+]/Ctrl+E :寻找下一半括弧
Ctrl+Shift+] :寻找下一半括弧并选定括弧之间的部分(包括括弧)......

阅读全文(4063) | 评论:0

VC6.0的一个小bug(2007-07-10 15:59:00)

摘要:vc6.0的bug多的不得了,已经发现很多了,我想可能是和底层相关的原因。比如什么与杀毒软件不能兼容,stdafx。h错误等等。 我今天无意中也发现了一个。就是一个简单的调用domodal。运行时出错。调试了一遍。发现就是这句出问题。大家应该知道,这句以后应该马上进入oninitdialog,可是就是没有进去。也就是说 这句系统自带函数出现问题。 这简直不可能! 后来经过多方尝试,终于发现了其中的奥秘。有时候,当编译器发现错误时,编译器的报错功能会出现问题。这个时候你就会想当然的认为可以运行。可是运行的时候却无端出错。 解决这个问题的方法很简单。切换到fileview视口下,点击右键,clean(清除debug里面没有用的问题),在编译一次,你就会发现编译器提示你的错误了,这个时候编译器的报错功能才恢复正常。......

阅读全文(3949) | 评论:0

为什么这个值不能保存?(困惑)(2007-01-11 16:19:00)

摘要:在MFC编程中,我们对控件关联变量应该很清楚了,比如通过classwizard给编辑框设置一个关联变量,然后就可以调用了: 如:    m_edit.SetWindowText("aa"); 这是正确的。但是你也知道有另外一种方法,如: GetDlgItem(IDC_EDIT1)- >SetWindowText("aa"); 这也是正确的。   下面我还有一种写法,你认为正确吗? 首先定义一个成员变量 CEdit *p_edit; 然后响应WM _INITDIALOG: BOOL Cmydlg:: OnInitDialog() {           p_edit=(CEdit*)GetDlgItem(IDC_EDIT1);          p_edit->SetWindowText(" aa"); } 好像和上面的写法一摸一样啊,只是用一个指针变量来代替GetDlgItem()的返回值罢了,你这样认为吗? 很遗憾,错误!刚刚开始的时候,我想不通。只是先用一个变量来代替返回值,为什么会错误呢?难道这个函数GetDlgItem()的返回值有问题? 没办法,只好去查MSDN。此时我的心情是郁闷的,因为当你突然发现你平时认为很正确的理论或者技术竟然是错误的或者你的理解是不完整的,打击是非常大的。不光是对你能力的不肯定,还有一个原因是你把这个错误技术已经应用到很多领域,会造成多大的损失,实在不敢再往下想! 当然还有一种激动。因为我很快就要解开谜底了。最好这个谜底是对我以前的理解的补充,而不是全盘否定,那样的话我会疯了!还好如我所愿。 让我们来看看MSDN的说法: CWnd::GetDlgItem  CWnd* GetDlgItem( int nID ) const; void CWnd::GetDlgItem( int nID, HWND* phWnd ) const; Return Value A pointer to the given control or child window......

阅读全文(3352) | 评论:1

MFC集合类学习笔记(2)(2007-01-10 20:51:00)

摘要:5.常用函数举例 (1) 数组          如int 数组:                    CArray<int,int>  m_intArray;                    m_intArray.Add(15);   // 添加一个元素                    CArray<CPoint,CPoint> pArray;                    pArray.Add(CPoint(10,10));   l         添加元素 注意,此时开始并没有分配数组的存储空间,但是add可以动态分配空间。如果可以预计数组大小,可以先用SetSize()来分配空间,因为如果频繁使用add,会产生内存碎片。SetSize可以增加数组元素,也可以减少,但是在减少时,并不会自动缩小保存数组数据的缓冲区,还是先调用removeAt先把元素删掉。   推荐使用:SetAtGrow(int index,ARG_TYPE newElement ),它与Add相比,就是可以利用它修改数组中的数组;而如果用add,那么必须先RemoveAll   l &nb......

阅读全文(5977) | 评论:0

MFC集合类学习笔记(1)(2007-01-10 20:50:00)

摘要:实际上集合类就是数据结构中的顺序存储结构和链表存储结构。它的优点就是建立这样的存储结构简单,并且把相关的操作集中成函数,方便用户的调用。比如顺序存储用到数组,如果要在数组中的固定位置添加一项,普通的方法就是要用一个for循环,有点烦琐。而在集合类中只要用一个add函数就完成了,相对简单一点。   数据结构是软件设计中的一个重要组成部分。因此我们有必要搞清楚集合类的相关问题。   1.3种类型 集合类中有3种大的类型: (1)         Array: 数组,可以动态的改变大小,有索引值和最大下标等。 (2)         List:双向链表,无索引,链表有头尾,插入元素要比数组快。 (3)         Map:是一种映射,俗名“字典”,是一种关联式数组。(在此不做讨论)   2.各自特点: 类型 是否有序 插入元素速度 搜索元素速度 索引 Array 有 慢 慢 有 List 有 快 慢 无   3.MFC中的集合类 类 是否使用模板 是否支持串行化 是否支持倾印 CArray 是 是 是 CTypedPtrArray 是 可能 是 CByteArray 否 是 是 CDWordArray 否 是 是 CObArray 否 是 是 CPtrArray 否 否 是 CStringArray 否 是 是 CWordArray 否 是 是 CUIntArray 否 否 是 CList 是 是 是 CTypedPtrList 是 ......

阅读全文(6137) | 评论:3

VC中的箭头画法(2007-01-03 01:01:00)

摘要:
在一些路径图中常常需要作出箭头,而MFC中并没有提供这样的函数,只好自己编写. 如图所示,有一直线p1p2,现在要在p2端画出一个箭头,p2p3就是箭头的一遍,做好辅助线,其中p2p3长度与p1p2相等.len是需要的箭头长度,theta是箭头的倾斜角度,图中的17度.    
    void CMyView::LineArrow(CPoint p1, CPoint p2,CDC *pDC) {        double x0,y0,x1,y1,x2,y2;        //(x0,y0)是p2p1的向量表示        x0=p1.x-p2.x;        y0=p1.y-p2.y;        //根据角度求出图中的p2p3向量和另一边的向量        x1=x0*cos(theta)-y0*sin(theta);        y1=x0*sin(theta)+y0*cos(theta);        x2=x0*cos(theta)+y0*sin(theta);        y2=x0*sin(-theta)+y0*cos(theta);        double l1,l2;        l1=sqrt(x1*x1+y1*y1);        l2=sqrt(x2*x2+y2*y2);    &nb......

阅读全文(6839) | 评论:1

VC中导入图像(BMP,JPG,GIF)并显示的方法(2007-01-16 13:24:00)

摘要:下面要实现的程序是:从磁盘上读取一个jpg,bmp,或者gif图像,然后在程序中用鼠标画出一个矩形,表示图像的显示范围 //打开文件对话框,记下路径名 void CMyView::OnFile()
{
 // TODO: Add your command handler code here
 CFileDialog dlg(TRUE);
 dlg.m_ofn.lpstrFilter="All Files(*.*)\0*.*\0textfiles(*.txt)\0*.txt\0\0";
 if(dlg.DoModal()==IDOK)
 {   bmpname=dlg.GetPathName();
  Isput=TRUE;  }
} //左键单击处理 void CMyView::OnLButtonDown(UINT nFlags, CPoint point)
{
 // TODO: Add your message handler code here and/or call default
   CClientDC dc(this);
   if(Isput==TRUE){
     if(pushnumb==0)
    {
      oldpoint=point;
      oripoint=point;
      pushnumb=1;
      SetCapture();
   }
  else
  {
  
       ReleaseCaptur......

阅读全文(10272) | 评论:0

LINEDDA(2)(2006-12-16 13:39:00)

摘要:
在(1)中我们已经讨论LINEDDA的使用了.但慢速画线只是一个简单的应用,下面让我们看一下它的有趣一面.   在有些程序中,经常需要用户单击来确定一片区域,然后获得其基本信息,实现了简单的查询功能.那么在单击时我们是不是可以产生一些效果呢?   来看下面这个基于SDI的程序:(除了下面所叙述的,没做任何其他操作)   它的效果是在以点击处为中心, 由2条直线组成,4个端点同时开始绘制,沿直线向中心靠拢, 绘制一个标准的”叉”,然后慢慢消失,实现了漂亮的点击效果.     (首先是缓缓绘制出来,然后缓缓消失)        //全局变量设置 int x,y; int a1,b1; int a2,b2; int a3,b3; const int z=10;                                                                                 // 左键按下 void CLineDDAView::OnLButtonDown(UINT nFlags, CPoint p) {        // TODO: Add your m......

阅读全文(3230) | 评论:0

SDI初始化机制探密 , 你知道吗?(2006-12-15 15:25:00)

摘要: 学习MFC这么久,直到前几天才弄明白了一个长久困扰我的问题.并且是一个很重要的问题,是关于MFC的机制.下面我拿出来和大家一起共享一下,请多指教.   大家都知道,对于一个SDI,不管是新建还是打开一份文档,都会引发一系列的操作.                               而我们的SDI开始运行时,都会自动先新建一份文档.确实它跟点击”新建”菜单项的操作是相同的.那么到底是在哪里自动调用这个菜单项的操作的呢?   到处都没找到.后来无意之间,在InitInstance中看到一个奇怪的家伙:   BOOL CManageApp::InitInstance() {        AfxEnableControlContainer();          // Standard initialization        // If you are not using these features and wish to reduce the size        //  of your final executable, you should remove from the following        //  the specific initialization routines you do not need.   #ifdef _AFXDLL        Enable3dControls();         &......

阅读全文(3643) | 评论:0

UpdateData 探索(2006-12-03 13:44:00)

摘要:早就想写这篇文章了,一直苦于没有时间。这么好的周末我自然不会浪费,于是上来侃2句了,希望对初学者有益。   UpdateData这个函数相信大家已经了解。带有1个参数。如果参数为TRUE,表示将控件中的内容“输入”给它的关联变量。如果是FALSE,表示将关联变量的内容输入到控件中。 一     UpdateData(FALSE) 假设现在已经有一个编辑框了,并且设置了一个关联变量m_stredit。好,现在我想初始化它,让对话框一运行的时候,编辑框中就有字符了。常见的做法如下: BOOL Cmydlg::OnInitDialog() {     CDialog::OnInitDialog();      ........    m_stredit="hello,world!";   UpdateData(FALSE); ............. } 结果自然正确。后来还见过这种写法,在构造函数中初始化关联变量: Cmydlg::Cmydlg(CWnd* pParent /*=NULL*/)
 : CDialog(Cmydlg::IDD, pParent)
{
 //{{AFX_DATA_INIT(CJianyanDlg)
  // NOTE: the ClassWizard will add member initialization here
 //}}AFX_DATA_INIT
 // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_stredit="hello,world!";
} 其他什么代码也没写。奇怪,也能运行。我并没有调用UpdateData(FALSE)啊?在哪儿调用了?一行行的检查自然让我把注意力集中在了: CDialog::OnInitDialog(); 这个基类的函数到底干了些什么勾当?我要搞明白。方法是这样的: 菜单栏,编辑,在文件中查找,......

阅读全文(7281) | 评论:0