mfc积累

(1)_T()和_TEXT()区别:
目的是为了对UNICODE码做区分,若定义了_UNICODE标志符则:  
  有宏#define   __T(x) L##x   //##为粘贴符号  
  否则:#define__T(x)   x  
  _TEXT()的定义与   __T()相同:  
  #define   _T(x)   __T(x)  
  #define   _TEXT(x)   __T(x)  
  UNICODE为区别于8位ASCII码的16位编码形式   
  当定义了宏UNICODE时,_TEXT("a")就变成了L"a";否则,就是"a".  
  _T和_TEXT一样。  
  写字符串常量时加上这个宏可以使你在把程序改为Unicode程序时比较容易。

(2)CNetMsgServerDlg   *dlg=(CNetMsgServerDlg*)   AfxGetApp()->GetMainWnd();  
   请问上面的语句中AfxGetApp()和GetMainWnd()表示什么意思?   
    AfxGetApp   --   取应用程序实例指针  
      GetMainWnd   --   取主窗口对象指针  
        这两个函数可以合成一个:  AfxGetMainWnd(); 
标注:
 AfxGetApp()取得指向当前工程的CWinApp对象的指针,  
  GetMainWnd()函数返回CWnd指针 

(3)TRACE,TRACE0, TRACE1, TRACE2, TRACE3, AfxDump 都是干什么的?TRACE有什么用?
摘自MSDN:
Debug mode输出调试信息
Debug 方式编译时输出调试信息,当Release方式编译时就不输出了。
代替 printf("error message"); 一个很好的方法。
以下用法在VC中用F5调试,在调试窗口中会显示出调式值出来
用法一(TRACE)

    // example for TRACE
    int i = 1;
    char sz[] = "one";
    TRACE( "Integer = %d, String = %s/n", i, sz );
    // Output: 'Integer = 1, String = one'
用法二(TRACE0)
    // example for TRACE0
    TRACE0( "Start Dump of MyClass members:" );
用法三(TRACE1)
    // example for TRACE1
    int i = 1;
    TRACE1( "Integer = %d/n", i );
    // Output: 'Integer = 1'
用法四(TRACE2)
    // example for TRACE2
    int i = 1;
    char sz[] = "one";
    TRACE2( "Integer = %d, String = %s/n", i, sz );
    // Output: 'Integer = 1, String = one'
在调试窗口中可看到输出结果。

用afxDump在Debug方式下查看值(afxDump)
int nValue = 100;
#ifdef _DEBUG   
    afxDump << "File could not be opened " << nValue << "/n";
#endif 
DEBUG 输出值:File could not be opened 100

TRACE0, TRACE1, TRACE2, TRACE3~~~~~~~上面有用法,用法的不同在于它们的输出参数不同。
而afxDump则直接与流符号“<<”来输出信息,输出的参数多个,与流符号“<<”的操作是完全相同的。
afxTraceEnabled则用来对TRACE0, TRACE1, TRACE2, TRACE3宏是否有用。
afxTraceEnabled = FALSE;  // 表TRACE无效
afxTraceEnabled = TRUE;  // 表TRACE有效

(4)运行时候出现fatal error C1071 unexpected end of file found in comment什么原因?
错误原因如下:    /*  */ 不完整 或是
/*控制打印左侧的 * 号*/
具体原因我说不出来,据说是因为某些特殊中文字符在某些字符集下会被处理成特殊的转义序列, 并且GBK字符集中尾字符还包含了C标准的转义字符 0x5C /'/' , 在这些情况下, 转义字符后跟 */ 或者是单行注释的换行都会出错, 特别是在非中文的系统下编译的时候这种情况特别严重 ...
注释里有中文等字符的时候, 记得在单行注释最后加个空格, 多行注释 */ 前加一个空格 ...
当然最好的是注释都用英文 , over ...

(5)怎么去掉状态栏 / 菜单栏 / 工具栏, 修改标题等

//   去掉菜单和修改标题

方法一:

BOOL CMFChomeworkApp::InitInstance()

{

     m_pMainWnd->ShowWindow(SW_SHOW);

     // 去掉菜单和修改标题

     AfxGetMainWnd()->SetMenu(NULL);

     AfxGetMainWnd()->SetWindowText("Sort");

     m_pMainWnd->UpdateWindow();

}

方法二:

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 

                  ............. 

                  ............. 

     this->SetWindowText("sfefef");     //加这句 

     return 0; 

}   

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT&   cs) 

     if( !CFrameWnd::PreCreateWindow(cs)) 

     return FALSE; 

     //   TODO:   在此处通过修改   CREATESTRUCT   cs   来修改窗口类或 

     //   样式 

        cs.style   &=   ~FWS_ADDTOTITLE;       //加这句 

     return TRUE; 

}

方法四:

原理: 主窗口的创建实际上是由Create函数来创建的, 而Create函数最终是调用CreateWindowEx函数

故可以重载 C**FramWnd 中的Create函数

如:

BOOL CMainFrame::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle , const RECT& rect , CWnd* pParentWnd , LPCTSTR lpszMenuName , DWORD dwExStyle , CCreateContext* pContext)

{

     // TODO: 在此添加专用代码和/或调用基类

     lpszClassName = NULL;

     lpszWindowName = "+++";

     dwStyle = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_VSCROLL;

     pParentWnd = NULL;

     lpszMenuName = NULL;

     dwExStyle = NULL;

     pContext = NULL;

     return CFrameWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, lpszMenuName, dwExStyle, pContext);

}

则可将标题进行修改为: +++

注:

(1)如果同时用了前面几种方法,最终的标题是由方法一决定的,原因是产生窗口是由以下几行代码决定:

    BOOL CMyWinApp:: InitInstance()

{

    m_pMainWnd = new CMyFramWnd; // 调用构造函数,而构造函数调用Create函数

    m_pMainWnd->ShowWindow(m_nCmdShow);

    m_pMainWnd->UpdateWindow();

    return TRUE;

}

(2)另外还有一种方法就是在资源文件中修改.修改.rc文件中的String Table中的第一项: IDR_MAINFRAME 128 *****,其中*****就是你所要改的字符,当然也可以把.rc文件用.txt文件打开后再修改

 

//  隐藏工具栏

    if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CLIPCHILDREN |/* WS_CHILD |*//* WS_VISIBLE | */CBRS_TOP

        | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||

        !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))

(6)如何设置按钮字体大小?
.h中加入 CFont m_font ;然後.cpp中初始化m_font . CreateFont ( 24, // nHeight 0, // nWidth 0, // nEscapement 0, // nOrientation FW_NORMAL, // nWeight FALSE, // bItalic FALSE, // bUnderline 0, // cStrikeOut ANSI_CHARSET, // nCharSet OUT_DEFAULT_PRECIS, // nOutPrecision CLIP_DEFAULT_PRECIS, // nClipPrecision DEFAULT_QUALITY, // nQuality DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily "Times New Roman"); // lpszFacename SendMessageToDescendants(WM_SETFONT,(WPARAM)HFONT(m_font),MAKELPARAM(TRUE,0 )); 

这可以让所有控件的字体大小改变的.如果不想這样,去掉SendMessageToDescendants好了.
例如:   
m_font.CreateFont (13, 0, 0, 0, FW_NORMAL, FALSE, FALSE, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS, "宋体");
SendMessageToDescendants(WM_SETFONT,(WPARAM)HFONT(m_font),MAKELPARAM(TRUE,0 ));
如果我想单独让某个控件m_Button的文字改变,可以这样做:
m_Button.SetFont(&m_font);    其它控件用法类似.

利用 TensorFlow 训练自己的目标识别器。本文内容来自于我的毕业设计,基于 TensorFlow 1.15.0,其他 TensorFlow 版本运行可能存在问题。.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值