zoukankan      html  css  js  c++  java
  • MFC的一些基本操作总结,比如操作字体,菜单,图片等

    一:对控件上的字体操作
    方法一:
    CFont *pfont = m_heightvalue.GetFont();//m_heightvalue为控件
    LOGFONT logfont;
    pfont->GetLogFont(&logfont);
    logfont.lfHeight = 100;
    m_font.CreateFontIndirect(&logfont);
    m_heightvalue.SetFont(&m_font);
    方法二:

    CFont m_newFont;
    m_newFont.CreatePointFont(250,_T("隶书")); //
    m_heightitle.SetFont(&m_newFont);
    m_heightitle.SetWindowTextW(strTemp);

    二:图行控件的操作:
    CBrush newBrush;
    CBrush *oldBrush;
    CRect rect;
    newBrush.CreateSolidBrush(RGB(255,0,0));
    CClientDC cClientDc(this);
    m_heightitle.GetWindowRect(&rect); //m_heightitle为图形控件
    ScreenToClient(&rect);
    oldBrush=cClientDc.SelectObject(&newBrush);
    cClientDc.Rectangle(&rect);
    cClientDc.SelectObject(oldBrush);
    newBrush.DeleteObject();
    三:改变控件的颜色:
    添加消息响应:ON_WM_CTLCOLOR()
    HBRUSH CDisplayValue::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    {
    HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);

    switch(pWnd->GetDlgCtrlID())
    {
    case IDC_STATIC_HEIGHTVALUE:
    pDC->SetBkMode(TRANSPARENT);
    pDC->SetBkColor(RGB(191,223,255));
    pDC->SetTextColor(RGB(255,0,0));
    return (HBRUSH)GetStockObject(HOLLOW_BRUSH);
    case IDC_STATIC_HEIGHTTITLE:
    pDC->SetBkMode(TRANSPARENT);
    pDC->SetBkColor(RGB(191,223,255));
    pDC->SetTextColor(RGB(0,0,0));
    return (HBRUSH)GetStockObject(HOLLOW_BRUSH);
    case IDC_STATIC_THICKNESSTITLE:
    pDC->SetBkMode(TRANSPARENT);
    pDC->SetBkColor(RGB(191,223,255));//SetBkMode(TRANSPARENT);
    pDC->SetTextColor(RGB(0,0,0));
    return (HBRUSH)GetStockObject(HOLLOW_BRUSH);
    case IDC_STATIC_THICKNESSVALUE:
    pDC->SetBkMode(TRANSPARENT);
    pDC->SetBkColor(RGB(191,223,255));
    pDC->SetTextColor(RGB(255,0,0));
    return (HBRUSH)GetStockObject(HOLLOW_BRUSH);
    default:
    break;
    }

    return hbr;
    }

    四:窗口大小改变:
    添加消息响应void CDebugCrtDlg::OnSize(UINT nType, int cx, int cy)
    参数: nType 指定了要求的调整大小的类型。这个参数可以是下列值之一: · SIZE_MAXIMIZED 窗口已
    经被最大化。
    · SIZE_MINIMIZED 窗口已经被最小化。
    · SIZE_RESTORED 窗口被改变了大小,但SIZE_MINIMIZED和SIZE_MAXIMIZED都不适用。
    · SIZE_MAXHIDE 当其它窗口被最大化时,消息被发送到所有的弹出窗口。
    · SIZE_MAXSHOW 当其它窗口被恢复到原来的大小时,消息被发送到所有的弹出窗口。

    cx 指定了客户区域的新宽度。
    cy 指定了客户区域的新高度。


    五:访问txt文件
    file.Open(m_strFilePath,CFile::modeRead);
    char pbufRead[1024];
    memset(pbufRead,0, sizeof(pbufRead));
    file.SeekToBegin();
    file.Read(pbufRead, sizeof(pbufRead));

    访问excel文件:
    http://bbs.csdn.net/topics/390481737

    代码:E:c++CodeMMES_New_CodeWarehouseManagementcomV1.62
    WarehouseManagementOutwarehouse.cpp

    六:图标的操作:
    从网上下载图象后,一般为.jpg格式,而MFC中图标格式为.ico格式,所以需要把.jpg格式转换为.ico格
    式,一般百度在线都有操作直接转换方法。//一般宽和高为128*128

    七:控件的位置改变和大小改变函数

    用CWnd类的函数MoveWindow()或SetWindowPos()可以改变控件的大小和位置

    void MoveWindow(int x,int y,int nWidth,int nHeight);
    void MoveWindow(LPCRECT lpRect);
    第一种用法需给出控件新的坐标和宽度、高度;
    第二种用法给出存放位置的CRect对象;
    例:
    CWnd *pWnd;
    pWnd = GetDlgItem( IDC_EDIT1 ); //获取控件指针,IDC_EDIT1为控件ID号
    pWnd->MoveWindow( CRect(0,0,100,100) ); //在窗口左上角显示一个宽100、高100的编辑控件
    SetWindowPos()函数使用更灵活,多用于只修改控件位置而大小不变或只修改大小而位置不变的情况:
    BOOL SetWindowPos(const CWnd* pWndInsertAfter,int x,int y,int cx,int cy,UINT nFlags);
    第一个参数我不会用,一般设为NULL;
    x、y控件位置;cx、cy控件宽度和高度;
    nFlags常用取值:
    SWP_NOZORDER:忽略第一个参数;
    SWP_NOMOVE:忽略x、y,维持位置不变;
    SWP_NOSIZE:忽略cx、cy,维持大小不变;
    例:
    CWnd *pWnd;
    pWnd = GetDlgItem( IDC_BUTTON1 ); //获取控件指针,IDC_BUTTON1为控件ID号
    pWnd->SetWindowPos( NULL,50,80,0,0,SWP_NOZORDER | SWP_NOSIZE ); //把按钮移到窗口的
    (50,80)处
    pWnd = GetDlgItem( IDC_EDIT1 );
    pWnd->SetWindowPos( NULL,0,0,100,80,SWP_NOZORDER | SWP_NOMOVE ); //把编辑控件的大小设为
    (100,80),位置不变
    pWnd = GetDlgItem( IDC_EDIT1 );
    pWnd->SetWindowPos( NULL,0,0,100,80,SWP_NOZORDER ); //编辑控件的大小和位置都改变
    以上方法也适用于各种窗口。

    八:wchar_t *类型 转为char *类型

    wchar_t是宽字符类型,每个wchar_t类型占2个字节,16位宽。汉字的表示就要用到wchar_t 。
    char,我们都知道,占一个字节,8位宽。

    CString strName("listen");
    char *pcstr = (char *)new char[2 * strName.GetLength()+1] ;

    WideCharToMultiByte( CP_ACP,
    0,
    strName, // 要转换的wchar_t*
    -1,
    pcstr, // 接收char*的缓冲区指针
    2 * strName.GetLength()+1, // pcstr的缓冲区的大小
    NULL,
    NULL );

    宽字节和多字节转换:
    http://www.doc88.com/p-335763678408.html (该网站中有简易方法)

    九:添加菜单:
    CMenu menu ,* pSubMenu; //定义下面要用到的cmenu对象
    menu.LoadMenu(IDR_MENU1); //装载自定义的右键菜单
    //获取第一个弹出菜单,所以第一个菜单必须有子菜单
    pSubMenu = menu.GetSubMenu(0);
    CPoint oPoint; //定义一个用于确定光标位置的位置
    GetCursorPos( &oPoint); //获取当前光标的位置,以便使得菜单可以跟随光标
    pSubMenu->TrackPopupMenu (TPM_LEFTALIGN, oPoint.x, oPoint.y, this);

    添加菜单后需要响应菜单:即添加该菜单ID对应的命令响应函数。

    十:控制滚动条
    wnd为控件或者窗口
    wnd.SendMessage(WM_VSCROLL,SB_LINEDOWN)

    十一:word的操作:
    http://www.jizhuomi.com/software/341.html
    该链接中简单操作了word

    十二:文件的读取
    CFile pCfile;
    bool bResult=pCfile.Open(lpszPathName,CFile::modeReadWrite);
    if (bResult!=FALSE)
    {
    pCfile.Read(m_str.GetBuffer(pCfile.GetLength()),pCfile.GetLength());
    }
    pCfile.Close();

  • 相关阅读:
    Javascript-DOM
    我的小站成长之路
    Reverse Proxy Vs Forward Proxy
    SSO-单点统一登录系统的设计与实现
    关于网络实名制
    LoggerOne
    AmpOne
    Get a handle on PHP Handlers
    Which PHP mode? Apache vs CGI vs FastCGI
    强制浏览器在点击回退按钮时重载刷新页面
  • 原文地址:https://www.cnblogs.com/lishennan/p/4362946.html
Copyright © 2011-2022 走看看