VC技巧总结

一.VC技巧

 

■Debug

VC设置条件断点:

     设置一个普通断点后,Ctrl+B,会弹出当前“断点”对话框。在下部会看到当前设置的所有断点,然后选择要设置条件的断点,点击“Condition”,来设置具体的“条件”即可。


■编译错误

fatal error C1010: unexpected end of file while looking for precompiled header directive

     原因是发生错误的文件没有于编译头。比如将全局函数统一封装在一个cpp中,或其他C代码文件添加进入当前工程。

解决方法:

    在文件开头添加: #include "stdafx.h"    

或者取消使用预编译头(不推荐方法):

    进入当前工程的 Settings,选择C/C++选项卡,从Category组合框中选中Precompiled Headers,选择Not Using Precompiled headers。

对预编译头文件说明如下:     
    所谓头文件预编译,就是把一个工程(Project)中使用的一些MFC标准头文件(如Windows.H、Afxwin.H)预先编译,以后该工程编译时,不再编译这部分头文件,仅仅使用预编译的结果。这样可以加快编译速度,节省时间。   
    
    预编译头文件通过编译stdafx.cpp生成,以工程名命名,由于预编译的头文件的后缀是“pch”,所以编译结果文件是projectname.pch。   
    编译器通过一个头文件stdafx.h来使用预编译头文件。stdafx.h这个头文件名是可以在project的编译设置里指定的。编译器认为,所有在指令#include   "stdafx.h"前的代码都是预编译的,它跳过#include  "stdafx.   h"指令,使用projectname.pch编译这条指令之后的所有代码。    
    因此,
所有的CPP实现文件第一条语句都是:#include   "stdafx.h"。 


二.MFC技巧总结

 有时要写个测试程序,用MFC比较方便:

■VC控件ID前缀

在给控件命名ID的时候遇到了诸如IDC,IDD,IDR,IDM,IDS等ID前缀:
      IDC_:控件的ID命名前缀(Control)
      IDM_:菜单的ID命名前缀(Menu)
      IDD_:对话框的ID命名前缀(Dialog)
      IDR_:资源的ID命名前缀(Resource)
      IDS_:字符串的ID命名前缀(String)
      IDB_:位图资源的ID命名前缀(Bitmap)


 ■ToolBar工具栏

 

    在创建了工具栏之后,需添加对应工具栏按钮的消息(如ON_BN_CLICKED)。否则,工具栏上的按钮将为变灰状态!

VC工具栏技巧:

    在资源编辑框中,打开Toolbar资源,就出现了工具条编辑界面。默认的最右边那个灰按钮就是用来添加新按钮的,双击它便会新建按钮(设置ButtonID,宽度,高度等)。
    按钮的消息响应函数一般没规定写在哪个文件里,具体看在哪对整个工程实现时比较方便或者看起来比较规范,就写在哪个文件。比如某个按钮要对窗口内容进行处理,放在view.cpp里看起来比较规范一点。

 


 

 

Tab控件顺序:

    在对话框上,Ctrl+D,会显示当前控件Tab顺序。点击控件设置第一个Tab顺序,之后依次类推。再按Ctrl+D保存!


 

获取控件句柄:

GetDlgItem(ID)


 

获取控件位置:

CRect r;

 

CListCtrl   m_list;

m_list.GetWindowRect(&r); 

GetDlgItem(IDC_STATIC1)->GetWindowRect(&r); 


 
设置控件位置:

CListCtrl   m_list;
m_list.GetWindowRect()取得CRect大小!

m_list.SetWindowPos(); / m_list.MoveWindow();

GetDlgItem(ID)->SetWindowPos() /  GetDlgItem(ID)->MoveWindow()


 
控件的显示与隐藏:

CButton   m_btnTest;
m_btnTest.ShowWindow(SW_HIDE);  //SW_SHOWNORMAL

GetDlgItem(ID)->ShowWindow(SW_HIDE)


 窗口中的定位
CRect   rtDlg;
AfxGetMainWnd()-> GetWindowRect(&rtDlg);

坐标转换:

ClientToScreen()
ScreenToClient()


 

设置“弹出对话框”图标:

先将插入的对话框的Border属性改成“Thin”或"Resizing",并确保选中了"System menu"属性:

(1)在插入的对话框类中,定义个图标成员:  HICON m_hIcon;

(2)在插入的对话框类的构造函数中,初始化图标成员:  m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
(3)在插入的对话框类的OnInitDialog中, 设置图标:

         SetIcon(m_hIcon, TRUE);   // Set big icon
         SetIcon(m_hIcon, FALSE);  // Set small icon

 

DONE。


 

MFC 静态文本的透明显示

MFC 静态文本的透明显示,即静态文本框的背景色是透明的:


处理消息WM_CTLCOLORON_WM_CTLCOLOR()

消息响应函数OnCtlColorafx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);

在OnCtlColor里添加:


 if( nCtlColor == CTLCOLOR_STATIC)
{  
    pDC->SetBkMode(TRANSPARENT); 

    return   HBRUSH( GetStockObject(HOLLOW_BRUSH) );  
}


设置对话框背景色

在OnPaint()中设置:

 if(IsIconic())

 { ...}

 else
 {
      CPaintDC dc(this);
      CRect rect;
      GetClientRect(rect);
      dc.FillSolidRect(rect,RGB(226,242,255));

      CDialog::OnPaint();
 }

 


 

 

修改菜单栏背景色

使用SetMenuInfo:

类中声明:

CMenu   m_TopMenu;
CBrush   m_brush;

在OnInitDialog()中:

 //插入菜单
 m_TopMenu.LoadMenu(IDR_TOPMENU);//
 SetMenu(&m_TopMenu);

 //设置菜单背景颜色
 ::MENUINFO  lpcmi;                    
 m_brush.CreateSolidBrush(RGB(230,230,230));
 memset(&lpcmi,0,sizeof(::LPCMENUINFO));
 lpcmi.cbSize=sizeof(MENUINFO);
 lpcmi.fMask=   MIM_BACKGROUND;  
 lpcmi.hbrBack=(HBRUSH)m_brush.operator HBRUSH();
 m_TopMenu.SetMenuInfo(&lpcmi);


 

修改Dialog状态栏颜色

类中添加:

CStatusBarCtrl m_StatusBar;
在OnInitDialog()中:

 

 //插入对话框状态栏------------------------
 m_StatusBar.Create(WS_CHILD|WS_VISIBLE |SBT_OWNERDRAW, CRect(0,0,0,0), this, 0);
 int strPartDim[2]= {130, -1}; //分割数量
 m_StatusBar.SetParts(2, strPartDim);
 m_StatusBar.SetText("状态栏1",0,0);
 m_StatusBar.SetBkColor(RGB(230,230,230)); //粉色255,160,220

 


 

VC小技巧收集 :    http://blog.csdn.net/syf442/archive/2010/08/12/5807068.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值