VC FAQ

来源:互联网 发布:工行大数据案例 编辑:程序博客网 时间:2024/05/01 19:02
1、当鼠标在窗口中改变鼠标形状:处理WM_SETCURSOR消息: HCURSOR hCursor = LoadCursor(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDC_CURSOR1));
 ::SetClassLong(m_hWnd,GCL_HCURSOR,(LONG)hCursor);
2、让窗口始终在其它窗口之上显示:SetWindowPos(&wndTopMost,0,0,0,0,0,SWP_NOMOVE | SWP_NOSIZE);
3、改变static控件背景色:处理WM_CTLCOLOR:if (pWnd->GetSafeHwnd()==GetDlgItem(IDC_STATIC1)->GetSafeHwnd() && CTLCOLOR_STATIC==nCtlColor){  m_bkBrush.CreateSolidBrush(RGB(255,0,0));   pDC->SetBkMode(TRANSPARENT);   return m_brBrush;        }             return hbr;
4、改变标题栏图标:HICON hLargeIcon = AfxGetApp()->LoadIcon(IDI_NEW_ICON);           HICON hSmallIcon = (HICON)::LoadImage(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_NEW_ICON),IMAGE_ICON,16,16,LR_DEFAULTCOLOR);        SetIcon(hLargeIcon,TRUE);   SetIcon(hSmallIcon,FALSE);
5、限制窗口大小在特定尺寸范围内:处理WM_GETMINMAXINFO:LRESULT OnGetMinMaxInfo(WPARAM wParam,LPARAM lParam)   { MINMAXINFO *pmmi = (MINMAXINFO *)lParam; pmmi->ptMinTrackSize.x = 100;pmmi->ptMinTrackSize.y = 150;pmmi->ptMaxTrackSize.x = 600; pmmi->ptMaxTrackSize.y = 400;}
6、给button加图片:          定义HBITMAP m_hBitmap为CTestDlgDlg的成员变量;
void CXXXDlg::OnButton()
{
    m_hBitmap = ::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BMP_MYBMP));
    m_cBtnBmp.SetBitmap(m_hBitmap);
}
7、设置程序窗口的初始大小
在CXXXApp::InitInstance()中加入代码:
       m_pMainWnd->SetWindowPos(NULL,0,0,750,500,SWP_NOMOVE); );//设置窗口的初始大小为750*500
8、如何让窗口和MDI窗口一启动就最大化和最小化?
先说窗口。
 在 InitStance 函数中设定 m_nCmdShow的取值.
 m_nCmdShow=SW_SHOWMAXMIZED //最大化
 m_nCmdShow=SW_SHOWMINMIZED //最小化
 m_nCmdShow=SW_SHOWNORMAL //正常方式
MDI窗口:
如果是创建新的应用程序,可以用MFC AppWizard 的Advanced 按钮并在MDI子窗
口风格组中检测最大化或最小化还可以重载 MDI Window 的PreCreateWindow函
数,设置WS_MAXMIZE or WS_MINMIZE
如果从 CMDIChildWnd派生,调用 OnInitialUpdate函数中的 CWnd::Show Window来
指定 MDI Child Window的风格。
使文档一生成就最大化:
如果是VC4.0,那么只要在CREATE时在ADVANCE中选择MDI->MAXIMIZED.
如果VC5,那么就在视类重载的OnInitUpdate成员函数中加上:
CMDIChildWnd *pWnd=(CMDIChildWnd *)GetParentFrame();
pWnd->MDIMaximize();
9、如何动态获取工具条指针并给工具条加标题
不想动态改变工具条的标题就在CMainFrame::OnCreate()中:
  int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  {
   ......
   m_wndToolBar.SetWindowText(_T("Standdard"));
   return 0;
  }
  若想动态改变工具条的标题,如下:
  声明一个菜单,并响应事件,如响应:OnMyToolBar()函数
  void CMainFrame::OnMyToolBar()
  {
   // TODO: Add your command handler code here
   CToolBar * pToolBar =(CToolBar *)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_TOOLBAR);
   pToolBar->SetWindowText (_T("Standdard"));
  }
  不要在TooBar悬浮时做OnMyToolBar()会出错的.
获得状态条的指针:
  CStatusBar * pStatusBar =(CStatusBar *)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_STATUS_BAR);
10、如何隐藏工具栏
添加如下两个函数
隐藏:
void CMainFrame::OnHide()
{
    if(m_wndToolBar.IsWindowVisible())
        m_wndToolBar.ModifyStyle(WS_VISIBLE,0);
    SendMessage(WM_SIZE);
}
显示:
void CMainFrame::OnShow()
{
    if(!m_wndToolBar.IsWindowVisible())
        m_wndToolBar.ModifyStyle(0,WS_VISIBLE);
    SendMessage(WM_SIZE);
}
或者:m_wndToolBar.ShowWindow(SW_HIDE);或
ShowControlBar(&m_wndToolBar, FALSE, FALSE);
 11、取屏幕颜色:
 HDC hdc;
 hdc = CreateDC("DISPLAY",0,0,0);  //设备为显示器
 CPoint point;
 GetCursorPos(&point);
 COLORREF color;
 color = GetPixel(hdc,point.x,point.y);
 int r,g,b;
 r = GetRValue(color);
 g = GetGValue(color);
 b = GetBValue(color);
 CString strR,strG,strB;
 strR.Format("%d",r);
 strG.Format("%d",g);
 strB.Format("%d",b);
 GetDlgItem(IDC_EDIT_R)->SetWindowText(strR);
 GetDlgItem(IDC_EDIT_G)->SetWindowText(strG);
 GetDlgItem(IDC_EDIT_B)->SetWindowText(strB);
 DeleteDC(hdc);


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=626223

 
原创粉丝点击