• VC编程锦集-1


    记录vc编程的知识点。由于vc知识点小而零碎,所以使用小锦集记录较合适。

     

    1. 设置对话框的颜色或背景:

    OnEraseBkgnd():适合修改对话框背景

    OnPaint():适合完成复杂的显示操作

    OnCtlColor():适合修改对话框上控件的颜色

    调用顺序:对话框初始化完毕,显示时调用OnSize()->OnEraseBkgnd()->OnPaint()->OnCtlColor()

     

    2. Windows窗口刷新机制:

    当窗口出现无效区域时,刷新显示无效区域。

    1)当窗口没有无效区域,即使收到WM_PAINT消息,程序也不作处理;

    2)当窗口有无效区域,收到WM_PAINT消息后,调用OnPaint()刷新窗口。

    主动刷行窗口:1:RedrawWindow;2:Invalidate(TRUE); (UpdateWindow())。

    以上两条参考:http://www.cnblogs.com/lidabo/archive/2012/07/03/2574702.html

    3. 屏蔽Statusbar默认提示

    1).h添加声明:afx_msg LRESULT OnSetMessageString(WPARAM, LPARAM);

    2)添加消息映射:ON_MESSAGE(WM_SETMESSAGESTRING, OnSetMessageString)

    3)实现函数:

    LRESULT CMainFrame::OnSetMessageString(WPARAM wParam, LPARAM lParam)
    {
        LRESULT lr = CFrameWnd::OnSetMessageString(wParam, lParam);

        if ((wParam == AFX_IDS_IDLEMESSAGE) 
            || (wParam == ID_VIEW_TOOLBAR) || (wParam == ID_VIEW_STATUS_BAR) || (wParam == ID_APP_ABOUT))
        {
            SetMessageText(L"");
            return S_OK;
        }

        return lr;

    } 

    4. 动态改变菜单项在状态栏中的提示
    1
    )通过ClassWizard添加重载函数:virtual void GetMessageString(UINT nID, CString& rMessage) const;

    2)完善实现如下:

    void CMainFrame::GetMessageString(UINT nID, CString& rMessage) const
    {
        // TODO: Add your specialized code here and/or call the base class

        if(nID == ID_EXAM_NEW) //  按ID修改提示
        {
            rMessage = "Create new file!";
            return;
        }

        return CFrameWnd::GetMessageString(nID, rMessage);

    } 

    5. 指定 BROWSEINFOW 的初始路径

    //
    //  brief : 指定 BROWSEINFOW 的初始路径
    int CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)   
    {   
        if  (uMsg == BFFM_INITIALIZED )
        {   
            ::SendMessage(hwnd, BFFM_SETSELECTION, TRUE, lpData);   
        }   
        return 0;  
    }
    void SelectDir()
    {
        BROWSEINFOW bi;
        bi.hwndOwner = this->m_hWnd;   
        bi.pidlRoot = NULL;   
        bi.pszDisplayName = wszPath;    //  Pointer to a buffer to receive the display name of the folder selected by the user.
        bi.lpszTitle = L"请选择目录:";    //  Pointer to a null-terminated string that is displayed above the tree view control in the dialog box.
        bi.ulFlags = 0;            
        bi.lpfn = BrowseCallbackProc;   
        bi.lParam = (LPARAM)GetImageDir();   
        bi.iImage = 0;   
        //弹出选择目录对话框
        LPITEMIDLIST lp = SHBrowseForFolderW(&bi);   

        if(lp && SHGetPathFromIDList(lp, wszPath))   
        {
            //  wszPath
        }
    }
     

     6. 获取屏幕矩阵

    //  获取全屏矩阵
    int nScreenCX = ::GetDeviceCaps(GetDC()->m_hDC, HORZRES); 
    int nScreenCY = ::GetDeviceCaps(GetDC()->m_hDC, VERTRES);
    //  获取除 系统任务栏 外的矩阵
    RECT rect;
    SystemParametersInfo(SPI_GETWORKAREA, 0, &rect, 0); 
    //  获取除 vs2010任务栏 + 系统任务栏 外的矩阵
    int nScreenCX = ::GetSystemMetrics(SM_CXFULLSCREEN); 
    int nScreenCY = ::GetSystemMetrics(SM_CYFULLSCREEN); 
     

    7. 消息窗口,隐藏的、用于接收消息,设置方法

    ::SetParent(pMyDlg->m_hWnd, HWND_MESSAGE);
    //Message-Only Windows:    
    //  A message-only window enables you to send and receive messages. 
    //  It is not visible, has no z-order, cannot be enumerated, and does not receive broadcast messages. 
    //  The window simply dispatches messages.
     


  • 相关阅读:
    网页设计~老生常谈~浏览器兼容2个主要问题的解决
    谈谈网页功能测试
    从PMP学习中浅谈公司行政工作
    肉肉谈对需求设计的想法到底是功能驱动界面?还是界面驱动功能?
    jndi和rmi学习
    mysql赋值变量:=的使用
    用Cookies和HashTable制作购物车
    nginx实现简单的反向代理
    .net Form认证扩展保存 Object 类型
    基于Docker搭建私有镜像仓库
  • 原文地址:https://www.cnblogs.com/ant-wjf/p/3391192.html
Copyright © 2020-2023  润新知