Invalidate();//更新视图**************************
pDC->TextOut(15,50, "单击鼠标左键输入数据!");
LineTo
MoveTo
pDC->SelectObject(pbrushOldBrush); //恢复旧画刷
pDC->Ellipse(rectSymbol);
CBrush brushNewBrush(RGB(0, 0, 0));
CBrush *pbrushOldBrush = pDC->SelectObject(&brushNewBrush);//用新画刷同时返回旧画刷
IsModified()
SetTitle(strTitle + strDirtyFlag);
UpdateFrameCounts();
UpdateAllViews(NULL);
OnPrepareDC
如果该函数被用于屏幕显示调用,那么默认情况下是没有任何功能可以实现显示功能的,然而,这种功能是在衍生类,如CscrollView,可以调整设备上下文的属性覆盖,因此,应该在重写基类前对该函数进行实现。 如果函数被调用进行打印,默认执行检查页面的信息存储在pInfo参数。如果文件的长度并没有被指定,如果后一页面已被打印出来,OnPrepareDC承担的文件成为一页长循环并停止打印。该函数将停止通过设置成员的结构m_bContinuePrinting打印循环
CClientDC dc(this);
OnPrepareDC(&dc);
dc.DPtoLP(&point); //屏幕坐标转换为逻辑坐标
oldbrush=pDC->SelectObject(&brush);//载入画刷
pDC->Rectangle(100,100,400,400);
pDC->SelectObject(oldbrush);//恢复画刷
brush.DeleteObject();
size=sizetemp;
SetScrollSizes(MM_TEXT, size);//设置滚动窗口区域
CScrollView::OnUpdate(pSender,lHint, pHint);
void CFormViewDemoView::OnInitialUpdate()
{ CFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
}
ResizeParentToFit是C语言的一种函数,作用是令视图大小控制其框架窗口的大小。
GetParentFrame()返回指向父框架窗口的指针。
IsFrameWnd()是虚函数,当对象是框架窗口时返回TRUE,否则返回FALSE.
可能是你的窗口不是框架窗口才出错。
GetParentFrame()一般用在View中,返回包围View的框架窗口的指针。
例如:
void CEx5View::OnRButtonDown(UINT nFlags, CPoint point)
{
// CView::OnRButtonDown(nFlags, point);
CWnd *pWnd = GetParentFrame() ;
ASSERT(pWnd!=NULL) ;
pWnd->SetWindowText("Main!!!!!") ;
}
TEXTMETRIC tm;
pDC->GetTextMetrics(&tm);
GetListCtrl().ModifyStyle(0,LVS_REPORT|LVS_SHOWSELALWAYS|LVS_SORTASCENDING);
//在列表上画线,分隔列表的行和列;第二种风格允许用户选中整行。
GetListCtrl().SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE,0,LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT);
CBrush* pOldBrush = pDC->SelectObject (&Brush); // 把刷子选入设备环境
//获得需要檫除背景的区域
CRect reClip;
GetClientRect(&reClip);
//重绘该区域
pDC->PatBlt(reClip.left , reClip.top , reClip.Width () , reClip.Height() , PATCOPY);
//释放刷子
pDC->SelectObject (pOldBrush);
CMultiDocTemplate* pDocTemplate;
pDocTemplate = new CMultiDocTemplate(
IDR_FACECOTYPE,
RUNTIME_CLASS(CFaceControl2Doc),
RUNTIME_CLASS(CChildFrame), // custom MDI child frame
RUNTIME_CLASS(CFaceControl2View));
AddDocTemplate(pDocTemplate);
// create main MDI Frame window
CMainFrame* pMainFrame = new CMainFrame;
if (!pMainFrame->LoadFrame(IDR_MAINFRAME))
return FALSE;
m_pMainWnd = pMainFrame;
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { // TODO: Add your specialized code here and/or call the base class if(CMDIFrameWnd::OnCreateClient(lpcs, pContext)) { m_wndMDIClient.SubclassWindow(m_hWndMDIClient);//字类化窗口 return true; } else return false; }
BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo) { // TODO: Add your specialized code here and/or call the base class if (m_wndMDIClient.OnCmdMsg(nID,nCode,pExtra,pHandlerInfo))//重定向消息 return TRUE;
return CMDIFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo); }
HICON hIcon=AfxGetApp() ->LoadIcon(IDI_ICON1);//加载图标资源
ASSERT(hIcon);
AfxGetMainWnd()->SendMessage(WM_SETICON ,TRUE,(LPARAM)hIcon);//向主框架发送消息更改图标
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CMDIFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
cs.style &= ~WS_MAXIMIZEBOX;//去除最大化按钮
// 设置主框架窗口的大小和位置
cs.cy = ::GetSystemMetrics(SM_CYSCREEN) / 3;
cs.cx = ::GetSystemMetrics(SM_CXSCREEN) / 3;
cs.y = ((cs.cy * 3) - cs.cy) / 2;
cs.x = ((cs.cx * 3) - cs.cx) / 2;
return TRUE;
}
cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing;//不创建一个新文档
CMenu* pTopMenu = GetSystemMenu(FALSE); //获取系统菜单
pTopMenu -> RemoveMenu(4,MF_BYPOSITION); //去除最大、最小化功能
pTopMenu -> RemoveMenu(2,MF_BYPOSITION); //去除改变尺寸功能
pTopMenu -> RemoveMenu(1,MF_BYPOSITION); //去除移动功能
void CMainFrame::OnFullscreen() { // TODO: Add your command handler code here GetWindowPlacement(&m_OldWndPlacement);//获取窗口位置 CRect WindowRect; GetWindowRect(&WindowRect);//获取窗口大小 CRect ClientRect; RepositionBars(0, 0xffff, AFX_IDW_PANE_FIRST, reposQuery, &ClientRect);//获取控制条窗口的大小 ClientToScreen(&ClientRect);//转换为屏幕坐标 //获取屏幕的分辨率 int nFullWidth=GetSystemMetrics(SM_CXSCREEN); int nFullHeight=GetSystemMetrics(SM_CYSCREEN); //将除控制条外的客户区全屏显示到从(0,0)到(nFullWidth, nFullHeight)区域, 将(0,0)和(nFullWidth, nFullHeight)两个点外扩充原窗口和除控制条之外的客户区位置间的差值, 就得到全屏显示的窗口位置 m_FullScreenRect.left=WindowRect.left-ClientRect.left; m_FullScreenRect.top=WindowRect.top-ClientRect.top; m_FullScreenRect.right=WindowRect.right-ClientRect.right+nFullWidth; m_FullScreenRect.bottom=WindowRect.bottom-ClientRect.bottom+nFullHeight; m_bFullScreen=TRUE; //设置全屏显示标志为 TRUE //进入全屏显示状态 WINDOWPLACEMENT wndpl; wndpl.length=sizeof(WINDOWPLACEMENT); wndpl.flags=0; wndpl.showCmd=SW_SHOWNORMAL; wndpl.rcNormalPosition=m_FullScreenRect; SetWindowPlacement(&wndpl); }
void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) { // TODO: Add your message handler code here and/or call default if(m_bFullScreen) { //全屏显示的大小 lpMMI->ptMaxSize.x=m_FullScreenRect.Width(); lpMMI->ptMaxSize.y=m_FullScreenRect.Height(); //全屏显示的位置 lpMMI->ptMaxPosition.x=m_FullScreenRect.Width(); lpMMI->ptMaxPosition.y=m_FullScreenRect.Height(); //最大的Track尺寸也要改变 lpMMI->ptMaxTrackSize.x=m_FullScreenRect.Width(); lpMMI->ptMaxTrackSize.y=m_FullScreenRect.Height(); } CFrameWnd::OnGetMinMaxInfo(lpMMI); }
void CMainFrame::EndFullScreen() { if(m_bFullScreen) { //退出全屏显示, 恢复原窗口显示 ShowWindow(SW_HIDE); SetWindowPlacement(&m_OldWndPlacement); } }
CenterWindow();
AnimateWindow(GetSafeHwnd(),800,AW_CENTER);//动画方式打开窗口
CBitmap bmp;
bmp.LoadBitmap(IDB_BITMAP1); ///加载位图
m_brushBackground.CreatePatternBrush(&bmp); ///创建位图画刷
CRect rect;
GetClientRect(&rect);//取得客户区域
pDC->FillRect(&rect,&m_brushBackground);//设置背景色
pDC->SetBkMode(TRANSPARENT);//设置背景颜色模式为透明色