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);