葡京网投哪个正规 > 首页 > VC视频教程笔记,VC的若干实用小技巧

原标题:VC视频教程笔记,VC的若干实用小技巧

浏览次数:84 时间:2020-03-25

Visual C++6.0(5.0卡塔尔国开荒工具成效非常苍劲,不过对于初学者的话,却有多数细节的难点亟待注意。笔者搜罗整理了以下一些实用小手艺,希望对初读书人有所帮忙。

Visual C++6.0(5.0State of Qatar开拓工具作用极度刚劲,不过对于初学者的话,却有过多细节的主题材料须求小心。小编辑访问集整理了以下一些实用小技能,希望对初学者有所扶助。 

第5课
1.CWnd::CreateSolidCaret成立插入符,ShowCaret(卡塔尔(قطر‎突显插入符。GetTextMetrics(卡塔尔(قطر‎,取得当前字体的有的音信。CWnd::CreateCaret(State of Qatar成立图象插入符
bitmap.LoadBitmap(IDB_BITMAP1卡塔尔;//此处的bitmap为成员变量!!!
CreateCaret(&bitmap);
ShowCaret();
TEXTMET讴歌RDXIC tm;//字体构造体
dc.GetTextMetrics(&tm);//
m_ptOrigin.y+=tm.tmHeight;//取得字体中度。
2.VC中CString::LoadString(ID号卡塔尔国,相比实惠。
3.路线层的定义:有三种办法创造路线层:
    (1)
pDC->BeginPath();
pDC->Rectangle(50,50,50+sz.cx,50+sz.cy);
pDC->EndPath();
pDC->SelectClipPath(RGN_DIFF);
     (2)
          CSize sz=pDC->GetTextExtent(str);
          CRgn rn;
          rn.CreateRectRgn(0,50,sz.cx,sz.cy);
          pDC->SelectClipRgn(&rn,RGN_DIFF);
路线层有何样效劳?可以维护大家原先的文书也许图像不被新兴画的掩瞒。
4.在View上输入文字的步骤。
CFont font;//创建字体对象
font.CreatePointFont(300,"华文行楷",NULL卡塔尔国;//设置
CFont *pOldFont=dc.SelectObject(&font卡塔尔;//将字体选取到DC中
TEXTMETEscortIC tm;//创立字体音讯目的
dc.GetTextMetrics(&tm卡塔尔(قطر‎;//获得当前字体消息
if(0x0d==nChar卡塔尔国//管理回车键
{
    m_strLine.Empty();
    m_ptOrigin.y+=tm.tmHeight;
}
else if(0x08==nChar卡塔尔国//管理退格键
{
    COLORREF clr=dc.SetTextColor(dc.GetBkColor());
    dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine);
    m_strLine=m_strLine.Left(m_strLine.GetLength()-1);
    dc.SetTextColor(clr);
}
else
{
    m_strLine+=nChar;
}
CSize sz=dc.GetTextExtent(m_strLine);

1、菜单相关主题材料

  一,给控件设置要点的四个办法
     1.变量
     m_edit1.SetFocus();

  1:使用vc开辟项目时,常会越过这种境况: 
    即显著只变动了叁个文书,却要把全部项目总体再次编译连接叁次。刚刚连接好,一运营,又提示重新编写翻译连接一回,非常讨厌。那是因为现身了前程文件的来头。 
    解决措施: 
    找寻相应文件夹下的debug目录,将现在文件全体delete, 再rebuild all三回。(未来 文件即其成立和改过时间都比系统时间靠后) 

CPoint pt;//处Ricoh标的职责
pt.x=m_ptOrigin.x+sz.cx;
pt.y=m_ptOrigin.y;

  Win32--HMENU

     2.控件ID
     GetDlgItem(IDC_EDIT1)->SetFocus();

  2:有的时候,workspace中的classview展现混乱。其变现如下: 
    (1State of Qatar:加多的成员变量或函数不能够显得; 
    (2State of Qatar:即便显示出来了变量或函数,双击后不可能跳至准确的任务。 
    化解办法: 
    删除.ncb文件,再rebuild all. 

SetCaretPos(pt);
dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine卡塔尔(قطر‎;//输出字体

  MFC--CMenu类对象

  二,设置菜单某项的书体为粗体
     CMenu* pMainMenu = AfxGetMainWnd()->GetMenu();
     CMenu* pSubMenu = NULL;
     int i;
     for (i=0; i<(int)pMainMenu->GetMenuItemCount(); i++)
     {
              pSubMenu = pMainMenu->GetSubMenu(i);
              if (pSubMenu && pSubMenu->GetMenuItemID(0) == ID_FILE_NEW)
                       break;
     }
     ::SetMenuDefaultItem(pSubMenu->m_hMenu,0,TRUE);  

  3:如何通透到底的删除八个类? 
    1:先从workspace中的fileview中删除相应的.h和.cpp文件。 
    2.再闭馆项目,从实际的文书夹中删除相应的.h和.cpp文件。 
    3.再删除.clw文件。 
    张开项目,rebuild all。 

dc.SelectObject(pOldFont卡塔尔(قطر‎;//将原先的字体选取回到。
5.模拟卡啦OK变色的步子。
     (1)设置沙漏
     (2)在沙漏中进入如下代码
//DEL    m_nWidth+=5;//此为view的成员变量,开头值为0
//DEL
//DEL
//DEL    CClientDC dc(this);
//DEL    TEXTMETRIC tm;
//DEL    dc.GetTextMetrics(&tm);
//DEL    CRect rect;
//DEL    rect.left=0;
//DEL    rect.top=200;
//DEL    rect.right=m_nWidth;
//DEL    rect.bottom=rect.top+tm.tmHeight;//此正方形的长度随着电火花计时器的接触,逐步增大
//DEL
//DEL    dc.SetTextColor(RGB(255,0,0));
//DEL    CString str;
//DEL    str.LoadString(IDS_WEIXIN);
//DEL    dc.DrawText(str,rect,DT_LEFT卡塔尔;此函数的职能是将字符串输出到星型中,但只要字符串的长度超越星型的长度,多余的字符将被截断
//DEL
//DEL    rect.top=150;
//DEL    rect.bottom=rect.top+tm.tmHeight;
//DEL    dc.DrawText(str,rect,DT_RIGHT);
//DEL
//DEL    CSize sz=dc.GetTextExtent(strState of Qatar;获得字符串的尺寸
//DEL    if(m_nWidth>sz.cx卡塔尔国当正方形的尺寸超过字符串的尺寸后,将其再一次归0
//DEL    {
//DEL     m_n;
//DEL     dc.SetTextColor(RGB(0,255,0));
//DEL     dc.TextOut(0,200,str);
//DEL    }
//DEL
//DEL    CView::OnTimer(nIDEvent);
6.SetTimer也得以用回调函数来操作,但并不实惠。以下是手续
    (1) 在View的OnCreate音讯响应函数中:SetTimer(1,1000,提姆er2Proc卡塔尔国;
    (2) 回调函数的完结:
void CALLBACK EXPORT Timer2Proc(
     HWND hWnd,        // handle of CWnd that called SetTimer
     UINT nMsg,        // WM_TIMER
     UINT nIDEvent,     // timer identification
     DWORD dwTime      // system time
)
{
//    MessageBox((((CMainFrame *)AfxGetMainWnd())->m_hWnd),"ddfaf","weixin",0);
;
CMainFrame *pMain=(CMainFrame *)AfxGetApp()->m_pMainWnd;//获得MainFrame的指针
CTextView *pView=(CTextView *)pMain->GetActiveView();//获得view的指针
CClientDC dc(pView);//构造DC
    dc.TextOut(333,222,"hello world");

2、相关类

     比如要对分界面里的“最小”选项进行操作,只要设置 1 1   就行了.

  4:初大家常常有那样的吸引: 
    直接望工程文件里投入叁个cpp原来的著工件再编写翻译连接的话老是唤醒未有找到预编写翻译头 
    消除情势: 
    #include "stdafx.h" 

}//我们能够见见,使用回调函数时要获得窗口依然应用程式的指针,给大家的操作带给劳动。并不便利。

  CMenu - 封装了有关菜单的各样操作,还包裹了一个要命首要的分子

  二,下载互连网文件到IE不时文件夹
     CString FileName;
     if(FAILED(URLDownloadToCacheFile(NULL,               
                                  "                
                                   FileName.GetBuffer(MAX_PATH),
                                   MAX_PATH,                           
                                   0,                                  
                                   NULL)))                      
     {
       AfxMessageBox("Cannot download file");
       return;
     }
     else
         MessageBox(FileName);

  5:怎么样向项目中步入本身定义的类? 
    方法非常多,介绍三个便当的: 
    选择insert/new class菜单 
    弹出对话框; 
    选择class type为generic; 
    输入类名。 
    当然,也得以谐和整制该类的基类 

第6课
1.当对某菜单增添音讯响应函数时,4个类的新闻响应优先次序分别是:1.View;2.CDOC;3.CMainFrame.4.CWinAPP.为啥?请参阅《深入显出》
2.新闻分类:a;标准音信(以WM_早先的消息,但不包蕴ON_COMMAND);b;命令消息ON_COMMAND(IDM_PHONE1, OnPhone1卡塔尔(قطر‎,菜单和工具栏的音信。c.公告新闻:开关,列表框发出的消息。
CCmdTarget只可以选用命令音讯。而从CCmdTarget派生的CWnd能够接过命令信息,也能够负责任正剧中人物规消息。
3.规定菜单的索引号,注意从0开头,分隔符也算数。什么叫弹出美食指南(Popup Menu)?叁个子菜单只好有一个缺省菜单。 //GetMenu(State of Qatar->GetSubMenu(0卡塔尔国->SetDefaultItem(5,TRUE卡塔尔(قطر‎;
str.Format("x=%d,y=%d",GetSystemMetrics(SM_CXMENUCHECK),
     GetSystemMetrics(SM_CYMENUCHECK卡塔尔国卡塔尔;//获得系统的菜系的位图的轻重。
/* SetMenu(NULL卡塔尔国;//移除菜单

    m_hMenu(菜单句柄卡塔尔(قطر‎

     FileName正是文件路线,能够指教进行操作.

  6:怎样在职业区(workspace卡塔尔导入四个品种(projectState of Qatar? 
    在打开三个类别(*.dsp文件卡塔尔国后,在运用“project” 菜单下insert project into workspace 子菜单接收另二个项目文件(*.dsp文件),可插入另三个连串。 
    在classview 视图中,右键能够激活当中有个别项目,职业区插入七个项目能便于不一样品种间拷贝代码、能源等。 

CMenu menu;
menu.LoadMenu(IDR_MAINFRAME);
SetMenu(&menu);
menu.Detach();*/扩张菜单,此处detach(卡塔尔国,假设是一对变量。

3、菜单项被点击的拍卖 WM_COMMAND 消息

  7: 在classview 视图中类太多怎么样整理? 
    大家得以在classview 视图中右键新建文件夹(new folder),再把装有肖似性质的类拖到相应的文件夹中,使全部视图看上去清晰明了。 

  1. void CMainFrame::OnUpdateEditCut(CCmdUI* pCmdUI)
    {
    if(2==pCmdUI->m_nIndex)
        pCmdUI->Enable(卡塔尔;//当此菜单显示时,设为可用。
    }
    5.右键弹出美食做法成效的达成方式有七个:
        a.Project->Add to Project->component and controls->文件夹VC components->Popup Menu OK
        b.用TrackPopupMenu()实现。
    CMenu menu;
    menu.LoadMenu(IDR_MENU1);
    CMenu *pPopup=menu.GetSubMenu(0);
    ClientToScreen(&point);
    pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y,
         GetParent());
    6.动态创造菜单的法子:

  ON_COMMAND

  8:如何快速删除项目下debug 文件夹中有时文件? 
    在fileview视图中选中对应项目,右键clean就能够。 

CMenu menu;
menu.CreatePopupMenu();
// GetMenu()->AppendMenu(MF_POPUP,(UINT)menu.m_hMenu,"WinSun");
GetMenu()->InsertMenu(2,MF_BYPOSITION | MF_POPUP,(UINT)menu.m_hMenu,"WinSun");
menu.AppendMenu(MF_STRING,IDM_HELLO,"Hello");
menu.AppendMenu(MF_STRING,112,"Weixin");
menu.AppendMenu(MF_STRING,113,"Mybole");
menu.Detach();
GetMenu()->GetSubMenu(0)->AppendMenu(MF_STRING,114,"Welcome");
GetMenu()->GetSubMenu(0)->InsertMenu(ID_FILE_OPEN,
     MF_BYCOMMAND | MF_STRING,115,"维新");
// GetMenu()->DeleteMenu(1,MF_BYPOSITION);
// GetMenu()->GetSubMenu(0)->DeleteMenu(2,MF_BYPOSITION);
7.为动态创造的美食指南扩张信息响应的步调
    a.在resource.h中增加#define IDM_HELLO 123
    b.在MainFrm.h中加入afx_msg void OnHello();
    c.MainFrm.cpp中加入ON_COMMAND(IDM_HELLO,OnHello)
    d.最终步入
void CMainFrame::OnHello()
{
MessageBox("Hello!");
}
8.动态增添电话号码本步骤
    a.处理WM_Char新闻。假使回车,则清空字符串,窗口重绘invalidate,将人名参加到菜单中,将字符串保存集结类CStringArray中,用的是成员函数Add方法。
    b.收取动态成立的菜单的多寡的办法。
      1)成立一个弹出菜单,弹出菜单上面有4个子菜单。将子菜单的ID号三番若干次。
      2)在resource.h中添加#define IDM_PHONE1 123....
      3)增添其新闻响应函数。注意注释中的文字
BEGIN_MESSAGE_MAP(CMenu2View, CView)
//{{AFX_MSG_MAP(CMenu2View)
ON_WM_CHAR()
ON_COMMAND(ID_EDIT_COPY, OnEditCopy卡塔尔//上边包车型地铁4句代码原本在那处。
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(IDM_PHONE1, OnPhone1卡塔尔//必供给这4句代码移到这里。
ON_COMMAND(IDM_PHONE2, OnPhone2)
ON_COMMAND(IDM_PHONE3, OnPhone3)
ON_COMMAND(IDM_PHONE4, OnPhone4)
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()
      4)填写代码
9.什么在MainFrame中拦截OnCommand音讯?答,在它扩充OnCommand的音讯管理函数就能够。
10.破绽比超级多调节和测量检验方法:Missing ";" before "*"
CMenu2Doc* GetDocument(卡塔尔(قطر‎;//因为CMenu2Doc是个不认得的变量,将其头文件富含进就可以。

4、程序的类对菜单命令的响应顺序

  9: 展开贰个源文件比较大的门类编写制定操作相当慢,如何是好? 
    不要张开项目文件(*.dsp文件卡塔尔国,直接打开要编写的单个源文件(*.h或*.cpp)进行编写制定,要快得多。 

第7课
1.假使在SDI中要调用对话框
    a.先插入八个会话框财富;
    b.然后在ClassWizards中为其创建二个类。其目标是相比有利为增添按纽和新闻响应函数。
    c.然后实例化它。在实例化时,必需将其头文件包罗进去。
2.制造非模态对话框,注意它不能够是有个别变量。当 点击非模态对话框的OnOK按纽时,它并从未关闭,而是遮掩了。供给调用destroyWindow(State of Qatar.
3.一个对象只可以三个按纽。为何?因为在Wincore.cpp的628行有代码 ASSERT(pWnd->m_hWnd == NULLState of Qatar;     // only do once而创建后它的m_hWnd就不为0了。此处ASSERT的用法是要是括号里面不为真,则程序崩溃。
4.哪些为静态文本框扩大新闻响应?首先将IDC_STATIC改名。同期还必要将Notify天性复选中。
5.做到加法作用。
    a.GetDlgItem();
    b.GetDlgItemText();
    c.GetDlgItemInt();
    d.将IDC_EDIT1事关CEDIT类型变量
    e.将IDC_EDIT1关系int型变量。注意调用 UpdateData(卡塔尔;
    f. //::SendMessage(GetDlgItem(IDC_EDIT1)->m_hWnd,WM_GETTEXT,10,(LPARAM)ch1);
//::SendMessage(m_edit1.m_hWnd,WM_GETTEXT,10,(LPARAM)ch1);
//GetDlgItem(IDC_EDIT1)->SendMessage(WM_GETTEXT,10,(LPARAM)ch1);
m_edit1.SendMessage(WM_GETTEXT,10,(LPARAM)ch1);
    g. SendDlgItemMessage(IDC_EDIT1,WM_GETTEXT,10,(LPARAM)ch1);
SendDlgItemMessage(IDC_EDIT2,WM_GETTEXT,10,(LPARAM)ch2);
6.点击按纽改换窗口尺寸
     if(GetDlgItemText(IDC_BUTTON2,str),str=="收缩<<")
{
    SetDlgItemText(IDC_BUTTON2,"扩展>>");
static CRect rectLarge;
static CRect rectSmall;

  顺序依次是:视图类->文书档案类->框架类->应用程序类

  10:假如想把整个项目拷贝到软盘,那个文件能够删掉? 
    除了项目文件夹中debug文件夹能够去除却,.ncb,.clw,.opt 等公事也得以去除,那么些文件rebuilt all后方可重复生成。 

if(rectLarge.IsRectNull())
{
    CRect rectSeparator;
    GetWindowRect(&rectLarge);
    GetDlgItem(IDC_SEPARATOR)->GetWindowRect(&rectSeparator);

  菜单命令音讯路由的进度:点击有些菜单项,框架类最初选用到那些命令音信,并提交视图类,视图类查找本人是不是对此音讯实行了响应,借使响应了,就用相应的响应函数对新闻举行管理,路由进程截至,若无响应,就交由文书档案类;文书档案类相符招来本身是不是对此音讯进行了响应,假设响应了,就用相应的响应函数对音讯进行管理,路由进度结束,若是也未有响应,就交还给视图类,视图类又交还给框架类;那时候,框架类才查看自身是还是不是对此新闻举办了响应,要是也未有响应就把新闻交给最终的应用程序类来张开管理

  11:怎么样快速生成二个与存活项目除了项目名外完全相通的新类型? 
    利用file菜单下生成新品类中的custom appwizard ,采纳 an existing project ,然后接受现成项目标体系文件名(*.dsp卡塔尔国finish,编写翻译后就生成多少个得以转换与存活项目相近但能够另行取名的花色的appwizard。你能够象用mfc appwizard同样用它。假使不想用了,可以在vc 安装目录下common/msdev98/template目录中删除该wizard中.awx和 .pdb文件。 

    rectSmall.left=rectLarge.left;
    rectSmall.top=rectLarge.top;
    rectSmall.right=rectLarge.right;
    rectSmall.bottom=rectSeparator.bottom;
}
if(str=="收缩<<")
{
    SetWindowPos(NULL,0,0,rectSmall.Width(),rectSmall.Height(),
     SWP_NOMOVE | SWP_NOZORDER);
}
else
{
    SetWindowPos(NULL,0,0,rectLarge.Width(),rectLarge.Height(),
     SWP_NOMOVE | SWP_NOZORDER);
}
7.回车时将输入宗旨移动到下二个控件
SetWindowLong(State of Qatar改革窗口的属性。
方法1:
改换控件的回调函数,注意IDC_EDIT1的MultiLine要复选上。
WNDPROC prevProc;
LRESULT CALLBACK WinSunProc(
    HWND hwnd,        // handle to window
    UINT uMsg,        // message identifier
    WPARAM wParam,    // first message parameter
    LPARAM lParam     // second message parameter
)
{
if(uMsg==WM_CHAR && wParam==0x0d)
{
    //::SetFocus(::GetNextWindow(hwnd,GW_HWNDNEXT));
    //SetFocus(::GetWindow(hwnd,GW_HWNDNEXT));
    CString str;
    str.Format("%d",hwnd);
    AfxMessageBox(str);//, UINT nType = MB_OK, UINT nIDHelp = 0 );
//    AfxGetApp()->
    SetFocus(::GetNextDlgTabItem(::GetParent(hwnd),hwnd,FALSE));
    return 1;
}
else
{
    return prevProc(hwnd,uMsg,wParam,lParam);
}
}
BOOL CTestDlg::OnInitDialog()
{
CDialog::OnInitDialog();

5、菜单的选取

  12:怎么样在源文件中稳定光标到对称的{ }和 #if, #endif ? 
    前面三个采纳ctrl和 “} ”键 ,前面一个使用ctrl和“k”键。 

// TOD Add extra initialization here
prevProc=(WNDPROC)SetWindowLong(GetDlgItem(IDC_EDIT1)->m_hWnd,GWL_WNDPROC,
    (LONG卡塔尔WinSunProc卡塔尔;//设置回调函数
return TRUE;    // return TRUE unless you set the focus to a control
                 // EXCEPTION: OCX Property Pages should return FALSE
}
方法2:
在OnOK响应函数中出席代码
//GetDlgItem(IDC_EDIT1)->GetNextWindow()->SetFocus();
//GetFocus()->GetNextWindow()->SetFocus();
//GetFocus()->GetWindow(GW_HWNDNEXT)->SetFocus();
GetNextDlgTabItem(GetFocus())->SetFocus();

  5.1增加菜单能源

  13:怎么样在vc中设置头文件和库文件? 
    除了vc缺省头文件和库文件外,即使常常要用到第三方的头文件和库文件能够在tools options 的directories中安装。假诺只是本项目要使用,能够在project setting->link object/library modules中设置库文件。 

  5.2装置菜单栏

  14:假诺让调控台应用程序支持mfc类库? 
    能够在调控台应用程序中include 来引进mfc库,可是调控台应用程序缺省是单线程的,mfc是五十二十四线程的,为消除该冲突,在project setting->c/c++ 选项,接纳code generation,在use run-time library 下拉框中甄选debug multithread。 

    在框架类窗口CFrameWnd的音信响应函数OnCreate中安装菜单栏的装载和移除

  15:怎么样为三个mfc应用程序增添odbc效率? 
  (1)在文件stdafx.h文件末尾增加上边一行: 
    #include // mfc odbc database classes 
  (2)在文件格局下编写制定rc文件(利用file->open as text 格局) 
    在底下的程序行(共有两处) 
    #include "l.chs/afxprint.rc" // printing/print preview resources 
    增加下一行: 
    #include "l.chs/afxdb.rc" // database resources 

    BOOL SetMenu(CMenu* pMenu);

  16:数据库表修改后,怎么着火速更新二个绑定到表的crecordset记录集? 
    利用classwizard 中 member variables标签下选中著录集类后,利用updatecoloumns和bind all。 

    1)装载菜单栏

  17:怎么着汉化唯有可施行代码的.exe 文件? 
    在nt 下行使vc open file 以resources方式展开*.exe 文件,直接退换能源文件,然后保留就能够。 
  18:小编怎么着技术创建二个等候光标?
    调用BeginWaitCursor函数来运行等待光标,调用EndWaitCursor函数 来截止等待光标。要注意,二者都要调用App的分子函数,如下所示:
    AfxGetApp(卡塔尔国->BeginWaitCursor(卡塔尔国; // 要做的事 AfxGetApp(卡塔尔->EndWaitCursor(卡塔尔; 
  
  19:什么是COLOPAJEROREF? 小编该如何用它?
    COLO福特ExplorerREF是叁个32-bit整型数值,它象征了一种颜色。你能够利用CRUISERGB函数来初阶化COLORAV4REF。
    譬如: COLORAV4REF color = XC60GB(0, 255, 0State of Qatar; LacrosseGB函数选取四个0-255数值,二个意味赫色,三个表示石青,三个表示淡绿。在地点的例证中,米白和蓝绿值都为0,所以在该颜色中从未革命和翠绿。土色为最大值255。所以该颜色为木色。0,0,0为浅桔黄,255,255,255为米白。
  
  20:笔者在自家的程序中是了CDWordArray。小编向它增添了约10,000个整数,那使得它变得要命丰裕慢。 
    CDWordArray是很好用的,只是因为你从未点名数组的最大尺寸。
    因此,当你加多新因素时,该类会从堆中重新分配空间。不幸的是,该类会在历次插入新因素时都为数组重新分配空间。假让你向它增多了累累新因素,全部那么些分配和复制数组的操作会就能够使它变慢。
    解决该难点的章程是,你能够运用SetSize 函数的第三个参数来改革这种重新分配的成效。例如,如若您把该参数设置为500 ,则每一遍数组空间超过时它才重新分配并累计500个新空间,并不是1个。这样一来 ,你就能够不要重新分配而加多了其余4九十几个要素空间,那也会大大提升程序的运维速度。
  
  21:AppWizard所爆发的STDAFX文件是干什么用的?
    它最首若是扶助爆发预编写翻译头文件的。平日你是无需修改它的。  

      CMenu menu;

  22:在本身的前后相继的一点部分,作者得以调用 MessageBox 函数来确立一个新闻对话框,举例在视类中。然则,在此外一些本人却不可能,如文书档案类中。为何?笔者怎样能力在本身的应用程序类中国建工业总集合团立三个消息对话框?
    Message博克斯函数来自CWnd类,所以你只好在从CWnd继承的类(如CView卡塔尔中调用它。但是,MFC也提供了AfxMessageBox函数,你能够在别之处调用它。

      menu.LoadMenu(菜单财富ID卡塔尔;  -加载菜单,并将目的和句柄进行绑定

  23:笔者索要在自家的次第中装置全局变量,以使文书档案中的全数类都能访谈。笔者应该把它内置哪儿?
    把该变量放到该利用程序类的头文件中的attribute处。然后,在程序的别之处,你都能够用上边包车型大巴法子来做客该变量: 
    CMyApp *m_App = (CMyApp *)AfxGetApp(); 
    m_App->MyGlobalVariable = ...;

      SetMenu(&menu);

  24:我听大人说MFC能够窥见内部存款和储蓄器漏洞,笔者什么使用该性情?
    如若你在Debug菜单中的Go选项(不是Project菜单中的Execute选项卡塔尔国来运作你的应用程序,MFC应该在程序终止时告诉内部存款和储蓄器漏洞。若无,那么试试运营MFC Tracer 工具程序(在VC++程序组中卡塔尔国,并运转追踪。然后回到应用程序。 

      menu.Detach();

  25:作者如何能力在自己的应用程序中循环浏览已经开荒的文档? 
    使用CDocTemplate中未公开的GetFirstDocPosition(卡塔尔和GetNextDoc(卡塔尔国函数。

    2)移除菜单栏

  26:作者怎样才具在自身的应用程序中循环浏览已经张开的视? 
    使用CDocument中未公开的GetFirstViewPosition(卡塔尔和GetNextView(State of Qatar函数。

      方法一:适用于VC6

  27:虚构函数PreCreateWindow是为啥用的?
     PreCreateWindow允许你在调用CreateWindow以前来改造窗口属性。 

          在CMainFrame类的OnCreate函数的终极增加——“this->SetMenu(NULLState of Qatar;”

  28:小编应当什么制止MFC在窗口标题栏上添Gavin书档案名? 
     在PreCreateWindow函数中去除FWS_ADDTOTITLE标识的窗口样式: 
     cs.style &= ~FWS_ADDTOTITLE ;
  
  29:笔者应该怎样防守MFC在窗口标题栏上把文书档案名预置成应用程序名? 
     在PreCreateWindow函数中删除FWS_PREFIXTITLE标识的窗口样式:  
     cs.style &= ~FWS_PREFIXTITLE;  

          恐怕:在CMainFrame类的PreCreateWindow函数的尾声增添——“cs.hMenu=NULL;”

  30:笔者有一无情势对话框。笔者怎么样技艺在窗口退出时去除CDialog对象? 
     把“delete this”加到PostNcDestroy中。那至关心重视要用在急需活动删除对象的场合。

      方法二:适用于VS2010

  31:为何把“delete this”放在PostNcDestroy中并不是OnNcDestroy?  
     OnNcDestroy只被已建构的窗口调用。假诺创建窗口退步(如PreCreateWindow卡塔尔国, 则未有窗口处来发送WM_NCDESTROY消息。PostNcDestroy是在目的窗口被完全除去, 在OnNcDestroy后,以至在窗口创建失利今后调用的。 

        CMainFrame类的OnCreate函数中:

  32:File菜单中的MRU列表是从哪里来的?列表中的名字放在哪个地方了?作者如何手艺更动列表中项指标最大值?  
     在行使程序类的InitInstance函数中对LoadStdProfileSettings的调用中。该调用接纳多个参数(在缺省气象下一旦未有传递值则为4卡塔尔(قطر‎。MRU文件名是从INI文件中调用的。假如你有隐含ID_FILE_MRU_FILE1的ID的菜谱选项,它会为调入的MRU列表所替换。若是您转移传递给LoadStdProfileSettings的数值(最大为16State of Qatar,则你就改成了所装如文件名的最大值。  

          1.注释掉

  33:使用普通话VC(VC++在汉语平台下得以动用粤语,但编写翻译后那多个开关上的、对话框上的汉语都成ASCII码了卡塔尔(قطر‎
    因为VC++在装置时是暗许按单字节字符安装的,而中文字符是双字节编码,自然就不可能科学呈现了。
    消除方式:
    将VC++光盘上DEVSTUDIO/SHAREDIDE/BIN/IDE路线下的国语财富语言模块Appwzchs.dll拷贝至硬盘DevStudio/SharedIDE/BIN/IDE路线下就可以。

          

34: 位图按键的行使(可产生动态效果卡塔尔国
    选定要采纳位图的按键(以OK开关为例,借使其标志符为IDOK),选其质量中的Owner draw选项(必得卡塔尔,当时,在对话框编辑器中就可看出原先呈现在按钮上的字符都冰释了。将按键的Caption改为OK(必需为题写)。打开Insert菜单,单击此中的Resource选项,随后接收Bitmap。再按下Import(导入)按键,将所需位图导入项目(Project)。在Resource View窗口中经过右键单击刚才导入的位图,将其ID(标志符)改为“OKU”(注意:字符必得为题写卡塔尔(قطر‎
    双引号及字母U无法紧缺。
    字母U代表的开关为按下情状时所突显的位图。
    其他还可利用后缀D、F、X,分别表示按下、具有输入大旨时、按键处于低效状态时所展示的位图。通过对同七个开关的区别情状使用差异的位图,比较轻松做出具有动态效果的按键。
    当将按键所需使用的位图导入到项目中后,就相应在行使位图开关的不得了对话框的类注解文件中步入位图按钮变量的定义CBitmapButton m_OK。在用到Bitmap处,参预如下语句:
    m_BtonOK.AutoLoad(IDC_BtonOK)
    使程序在运作时将位图装入内部存款和储蓄器并显示。
    至此,创制位图开关的一体步骤即告停止。
  
  35:通用对话框的选择
    大家都高出过CFileDialog文件对话框吧,它的参数令人口疼.下边湮灭我们的头痛.
    先在利用文件对话框的类的类定义文件中投入对象定义CFileDialog m_MyOpenDialog(TRUE,"avi","*.avi"卡塔尔。随后,在须求动用该对话框的地点投入以下语句:
    m_MyOpenDialog.Domodal();
    就足以预览全体.avi文件.

          

    其调用法则为:
    函数原型:
    CFileDialog(BOOL bOpenFileDialog,LPCTSTR lpszDefExt=NULL,LPCTSTR lpszFileName=NULL,DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPR OMPT,LPCTSTR lpszFilter=NULL,CWnd * pParentWnd
=NULL);
    参数表明:
    bOpenFileDialog:为TRUE或FALSE。TRUE为打开文件;FALSE为保留文件。
    lpszDefExt     :为缺省的恢弘名。
    lpszFileName   :为显示在文书名组合框的编辑框的文书名,平日可选NULL
    dwFlags        :为对话框风格,平日为OFN_HIDEREADONLY | OFN_OVE迈凯伦720SWRubiconITEPROMPT,即潜伏只读选项和掩没原来就有文件前提醒。
    LpszFilter     :为下拉列表枢中突显文件类型。
    pParentWnd     :常常可选NULL。
    比如:在文件类型列表框的编写框要显示“可实行文件(*.exe卡塔尔”,而在它的下拉列表框中列出“录制文件(*.avi)、All Files(*.*卡塔尔(قطر‎”内容,则变量定义如下:CFileDialog m_MyOpenDialog(TRUE,"exe",NULL,OFN_HIDEREADONLY | OFN_OVE锐界WRubiconITEPROMPT,"可推行文件(*.exe) | *.exe|录像文件(*.bat) | *.bat |All Files (*.*) | *.* ||",NULL);
    注:看看未有*.*后的||会是什么效果.

          2.CMainFrame类的PreCreateWindow函数中丰裕:

  36:怎么样加多无基类的类?
    在ClassView中右键选new class,class type选 Generic Class,填上Class Name就能够了。

          图片 1

  37:怎么着定义基于CObject的类?
    根据难题4生成新类,手动在新类的头文件的class CYourClass后拉长:public CObject.
    方式如下:
    class CYourClass : public CObject
    即可. 

          3.CMainFrame类的头文件中注释掉:

     打开财富文件中的菜单模板。打开新美食指南选项的个性对话框。在对话框的底层的Prompt编辑框中,你可以如下钦命状态栏上的提醒消息和工具栏上的提醒消息 (假若您已经创制的工具栏按键State of Qatar: Status bar string/nFlying tag  

          图片 2

38:给控件设置要点的七个办法
    1.变量
    m_edit1.SetFocus();

  5.3菜单捕获

    2.控件ID
    GetDlgItem(IDC_EDIT1)->SetFocus();

    1)获取程序的菜单栏:CMenu* GetMenu() const;

  39:设置菜单某项的字体为粗体
    CMenu* pMainMenu = AfxGetMainWnd()->GetMenu();
    CMenu* pSubMenu = NULL;
    int i;
    for (i=0; i<(int)pMainMenu->GetMenuItemCount(); i++)
    {
             pSubMenu = pMainMenu->GetSubMenu(i);
             if (pSubMenu && pSubMenu->GetMenuItemID(0) == ID_FILE_NEW)
                      break;
    }
    ::SetMenuDefaultItem(pSubMenu->m_hMenu,0,TRUE);  

    2)获取顶层菜单项:CMenu* GetSubMenu(int nPos) const;

    比方要对分界面里的“最小”选项实行操作,只要设置 1 1  就能够了. 

      如:GetSubMenu(0)

  40:下载网络文件到IE有时文件夹
    CString FileName;
    if(FAILED(URLDownloadToCacheFile(NULL,               
                                 "                
                                  FileName.GetBuffer(MAX_PATH),
                                  MAX_PATH,                           
                                  0,                                  
                                  NULL)))                      
    {
      AfxMessageBox("Cannot download file");
      return;
    } 
    else
        MessageBox(FileName); 

  5.4安装菜单项的图景

    FileName就是文本路线,能够指教举办操作 

    ON_WM_INITMENUPOPUP

    标识菜单项: ::CheckMenuItem / CMenu::CheckMenuItem

      UINT CheckMenuItem(UINT nIDCheckItem,UINT nCheck);

        nIDCheckItem:钦点须求管理的下拉菜单项,值可为地方索引号(如:0)可能菜单项ID号(如:(UINTState of QatarID_FILE_NEW)

        nCheck:设置菜单项 | 怎么样定位该菜单项,

          包括:MF_CHECKED/MF_UNCHECKED | MF_BYPOSITION/MF_BYCOMMAND

      例:GetMenu()->GetSubMenu(0)->CheckMenuItem(0,MF_CHECKED|MF_BYPOSITION);

      或者:GetMenu()->GetSubMenu(0)->CheckMenuItem(ID_FILE_NEW,MF_CHECKED|MF_BYCOMMAND);

    私下认可菜单项: ::SetDefaultItem / CMenu::SetDefaultItem

      BOOL SetDefaultItem(UINT uItem,BOOL fByPos=FALSE);

        uItem:钦定供给管理的下拉菜单项,值可为位置索引号(如为-1则注脚未有私下认可菜单项)或许菜单项ID号(如:(UINT卡塔尔ID_FILE_NEW)

        fByPos:是BOOL类型,若为FALSE,则第二个参数须为菜单项ID号,不然为地方索引号

      例:GetMenu()->GetSubMenu(0)->SetDefaultItem(1,TRUE);

    图形标识菜单: ::SetMenuItemBitmaps / CMenu::SetMenuItemBitmaps

      BOOL SetMenuItemBitmaps(UINT nPosition,UINT nFlags,const CBitmap* pBmpUnchecked,const CBitmap* pBmpChecked);

        nPosition:钦赐须要管理的下拉菜单项,值可为地方索引号(如为-1则申明未有暗中认可菜单项)或许菜单项ID号(如:(UINT卡塔尔(قطر‎ID_FILE_NEW)

        nFlags:MF_BYPOSITION/MF_BYCOMMAND

        pBmpUnchecked:钦定当裁撤菜单项选中状态时的位图

        pBmpChecked:钦赐选中菜单项时显得的位图

      例:m_bitmap.LoadBitmap(IDB_BITMAP1);

        GetMenu()->GetSubMenu(0)->SetMenuItemBitmaps(0,MF_BYPOSITION,&m_bitmap,&m_bitmap);

        图形标志的尺寸应该为:16x16

    禁止使用菜单项: ::EnableMenuItem / CMenu::EnableMenuItem

      UINT EnableMenuItem(UINT nIDEnableItem,UINT nEnable);

        nIDEnableItem:钦点必要管理的下拉菜单项,值可为地方索引号(如为-1则注解未有暗中同意菜单项)或然菜单项ID号(如:(UINT卡塔尔ID_FILE_NEW)

        nEnable:MF_DISABLED/MF_ENABLED/MF_GRAYED | MF_BYPOSITION/MF_BYCOMMAND

      注意:若要改过MFC自动创造的菜单项的意况,须修在程序框架窗口类的布局函数中加上:m_bAutoMenuEnable=FALSE;

      例:GetMenu()->GetSubMenu(0)->EnableMenuItem(2,MF_DISABLED|MF_GRAYED|MF_BYPOSITION);

  5.5MFC默许成立的菜单项状态维护

    利用MFC编程时,对于活动创设好的菜单项,可采纳MFC类向导的UPDATE_COMMAND_UI音讯来改动菜单项状态(只好动用于下拉菜单项),仅需对相应的菜单项的ID生成消息响应函数;

    图片 3

    在UPDATE_COMMAND_UI新闻的响应函数中可调用CCmdUI的呼应函数如:Enable/SetCheck/SetText,分别完成使菜单项可用或剥夺/设置标识菜单/设置菜单项的文件的效能 

void CMainFrame::OnUpdateEditCut(CCmdUI* pCmdUI) 
{
    // TODO: Add your command update UI handler code here
    pCmdUI->Enable(); 
}

     工具栏上的各工具按钮和下拉菜单项的ID标记是同一的,改动菜单项的景观工具栏上相应的工具按键状态也会更动;所以,如若要把工具栏的几个工具开关与菜单项中的有个别菜单项相关联,只要将它们的ID设为同贰个就能够了;

    图片 4

    图片 5   

void CMainFrame::OnUpdateFileNew(CCmdUI* pCmdUI) 
{
    // TODO: Add your command update UI handler code here
    pCmdUI->Enable(FALSE);

}

    图片 6

  5.6上下文菜单(右键菜单)

    ON_WM_CONTEXTMENU

    CMenu::TrackPopupMenu / ::TrackPopupMenu -显示弹出式菜单

    BOOL TrackPopupMenu(UINT nFlags,int x,int y,CWnd* pWnd,LPCRECT lpRect=NULL);

      nFlags:内定菜单在荧屏上出示的职务

      x,y:菜单展现地方处的坐标,这里的坐标是显示器坐标

      pWnd:钦点具备菜单的窗口对象

    CMenu::GetSubMenu / ::GetSubMenu -得到有些顶层菜单项的下拉菜单

    

    方法一:利用VC提供的机件来创建

      1)VC菜单栏->工程->加多到工程->Components and Controls...

      2)在对话框中双击Visual C++ Components目录

      3)选中“Pop-up Menu”组件,单击<Insert>,确认后就可看出增添右键菜单组件设置对话框

      4)Add pop-up menu to:增添右键菜单到哪些类;Menu resource ID:右键菜单的资源ID;

      5)重回到Visual C++ Components目录下,点击<Close>按键,完结组件的增进

      在财富窗口的Menu下多了右键菜单的财富;在第4步所选类下扩张了函数OnContextMenu,此函数即为右键菜单的调用函数;

    方法二:手动创造

      1)增添菜单能源

        在呈现右键菜单时顶层菜单项是不出示的,能够设置任意文本

      2)给CMenuView类添加WM_RBUTTONDOWN音讯响应函数;

        图片 7

      3)定义三个CMenu对象,加载菜单项能源,对于右键菜单来讲独有贰个顶层菜单项,索引地方为0,调用ClientToScreen函数将客商区的坐标转变为显示器坐标,调用TrackPopupMenu函数字展现示右键菜单;        

void CMenuView::OnRButtonDown(UINT nFlags, CPoint point) 
{
    // TODO: Add your message handler code here and/or call default
    CMenu menu;
    menu.LoadMenu(IDR_MENU1);
    CMenu* pPopup=menu.GetSubMenu(0);

    ClientToScreen(&point);

    pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this);
    
    CView::OnRButtonDown(nFlags, point);
}

      4)利用MFC类向导为右键菜单项的各选项增加音信响应函数

        图片 8

        图片 9

  5.7对菜单进行动态操作

    1)创立菜单项

      1--在框架类中开创菜单项

        可在其OnCreate函数中选取:CreateMenu(卡塔尔(قطر‎ / CreatePopupMenu(卡塔尔(قطر‎       

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    ......
    CMenu menu;
    menu.CreateMenu();
    GetMenu()->AppendMenu(......);
    menu.Detach();

    return 0;
}

      2--在视图类等任何类的音讯响应函数中创设菜单项,须先在那类中加多成员变量:CMenu m_menu

        图片 10        

int CTestView::OnChar(UINT nChar,UINT nRepCnt,UINT nFlags)
{
    ......
    m_menu.CreatePopupMenu();
    GetParent()->GetMenu()->AppendMenu(......);
    GetParent()->DrawMenuBar(); //操作完成后须重绘菜单栏

    return 0;
}

    2)追加菜单项

      利用AppendMenu函数把三个新的菜单项追加到原来就有菜单项的终极

      BOOL AppendMenu(UINT nFlags,UINT_PTR nIDNewItem=0,LPCTSTR lpszNewItem=NULL);

      或:BOOL AppendMenu( UINT nFlags, UINT nIDNewItem, const CBitmap* pBmp );

        nFlags:

          MF_POPUP/MF_STRING/MF_SEPARATOR

          MF_CHECKED/MF_UNCHECKED/MF_ENABLED/MF_DISABLED/MF_GRAYED

          MF_OWNERDRAW/MF_MENUBREAK/MF_MENUBARBREAK

        nIDNewItem:假诺第叁个参数为MF_POPUP,则nIDNewItem就是m_hMenu;不然就为所充实的菜单项的ID;为MF_SEPARATO昂科雷时一直忽视

        lpszNewItem:假设第一个参数为MF_STGL450ING,则为指向要增进的菜单项的文件的指针;第2个参数为MF_OWNEOdysseyDRAW,则为指向要加多的菜单项的增大数据的指针;其余则直接忽视;        

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    ......
    CMenu menu;
    menu.CreateMenu();
    GetMenu()->AppendMenu(MF_POPUP,(UINT)menu.m_hMenu,"Test");
    menu.Detach();

    return 0;
}

    3)插入菜单项

      利用InsertMenu函数在本来就有菜单项在此以前插入一个新的菜单项;

      BOOL InsertMenu( UINT nPosition, UINT nFlags, UINT nIDNewItem = 0, LPCTSTR lpszNewItem = NULL );

      或:BOOL InsertMenu( UINT nPosition, UINT nFlags, UINT nIDNewItem, const CBitmap* pBmp );

        nPosition:内定新菜单项的插入地点;决意于第二个参数nFlags为MF_BYCOMMAND还是WM_BYPOSITION;

        nFlags:和AppendMenu中的参数同样 | MF_BYCOMMAND/MF_BYPOSITION

        nIDNewItem、lpszNewItem:均与AppendMenu中的参数相通      

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    ......
    CMenu menu;
    menu.CreateMenu();
    //在菜单栏的第二个位置处插入新的顶层菜单项
    GetMenu()->InsertMenu(1,MF_POPUP|MF_BYPOSITION,(UINT)menu.m_hMenu,"Test");
    //在新插入的顶层菜单项下添加下拉菜单项
    menu.AppendMenu(MF_STRING,(UINT)IDR_MENU1,"Hello");
    menu.AppendMenu(MF_STRING,(UINT)IDR_MENU2,"VC++");
    menu.AppendMenu(MF_STRING,(UINT)IDR_MENU3,"MFC");
    menu.Detach();
    //在菜单栏首个顶层菜单项下追加下拉菜单项
    GetMenu()->GetSubMenu(0)->AppendMenu(MF_STRING,(UINT)IDR_MENU1,"Welcom");
    //在菜单栏首个顶层菜单项下插入下拉菜单项
    GetMenu()->GetSubMenu(0)->InsertMenu(0,MF_BYPOSITION|MF_STRING,(UINT)IDR_MENU5,"Autumn");

    return 0;
}

    4)删除菜单项

      BOOL DeleteMenu(UINT nPosition,UINT nFlags);      

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    ......
    //删除顶层菜单项
    GetMenu()->DeleteMenu(1,MF_BYPOSITION);
    //删除下拉菜单项
    GetMenu()->GetSubMenu(0)->DeleteMenu(0,MF_BYPOSITION);

    return 0;
}

    5)动态增加的菜单项的响应命令

      动态拉长的菜单项未在财富窗口中增多相应的菜单项能源,故没有对应的菜单项ID标志;

      1--首先为动态增进的菜单项创制菜单财富ID,在文书窗口中开拓Header Files目录,在Resource.h文件中定义财富ID

        例:#define IDM_HELLO      111

      2--动态追加菜单项AppendMenu函数和动态插入菜单项InsertMenu函数的UINT nIDNewItem参数即为菜单项能源ID(IDM_HELLO)

      3--在菜单项命令所在的类(框架类)的头文件中增添命令响应函数的原型      

class CMainFrame : public CFrameWnd
{
    ......
// Generated message map functions
protected:
    //{{AFX_MSG(CMainFrame)
    afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
        // NOTE - the ClassWizard will add and remove member functions here.
        //    DO NOT EDIT what you see in these blocks of generated code!
    //}}AFX_MSG

    afx_msg void OnHello();

    DECLARE_MESSAGE_MAP()
};

      4--在菜单项命令所在的类(框架类)的源文件中的映射表增添信息映射     

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
    //{{AFX_MSG_MAP(CMainFrame)
        // NOTE - the ClassWizard will add and remove mapping macros here.
        //    DO NOT EDIT what you see in these blocks of generated code !
    ON_WM_CREATE()
    //}}AFX_MSG_MAP

    ON_COMMAND(IDM_HELLO,OnHello)  //注意这里结尾没有分号

END_MESSAGE_MAP()

      5--在菜单项命令所在的类(框架类)的源文件中增添音讯响应函数的定义      

void CMainFrame::OnHello()
{
    MessageBox("Hello");
}

  5.8改变菜单背景观、加多Logo    

CMenu mMenuConfig;  
CBrush  mMenuBrush;  

if (!mMenuConfig.m_hMenu)  
{  
    mMenuConfig.CreatePopupMenu();  
    mMenuConfig.AppendMenu(MF_STRING,ID_MENU_MORE_CONFIG, _T("设置"));  
    mMenuConfig.AppendMenu(MF_STRING,ID_MENU_MORE_UPGRADE, _T("更新"));  
    mMenuConfig.AppendMenu(MF_STRING,ID_MENU_MORE_ABOUT, _T("关于"));  

    mMenuBrush.CreateSolidBrush(RGB(240,240,0));//RGB(255,128,128));  
    MENUINFO mi;  
    mi.cbSize=sizeof(MENUINFO);  
    mi.fMask=MIM_BACKGROUND;  
    mi.hbrBack=(HBRUSH)mMenuBrush;  
    SetMenuInfo((HMENU)(mMenuConfig.m_hMenu),&mi);  

    CBitmap bmp;  
    bmp.LoadBitmap(IDB_BITMAP_CONFIG);//IDB_BITMAP_CONFIG为导入工程中的bmp图片的id;  
    mMenuConfig.SetMenuItemBitmaps(ID_MENU_MORE_CONFIG, MF_BYCOMMAND, bmp, bmp);//此处常态和高亮显示为一样;  
    bmp.Detach();//必须Detach,否则图标不显示       

  DeleteObject(mMenuBrush);  
} 

 

本文由葡京网投哪个正规发布于首页,转载请注明出处:VC视频教程笔记,VC的若干实用小技巧

关键词:

上一篇:使用技巧葡京网投哪个正规

下一篇:VC视频教程笔记,VC小知识总结