正文

【原创VC】不规则窗口程序设计2008-02-21 10:55:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/sword2008/32825.html

分享到:

/**不规则窗口程序设计----by sword2008        @2008.2.21    刚好元宵节 */  目标:对话框或者其他窗口控件,利用 函数绘制任意外观的控件或者窗口 int SetWindowRgn( HWND hWnd, HRGN hRgn, BOOL bRedraw ); hWnd为窗口句柄, bRedraw为是否重绘 hRgn为外观区域,这个为最重要的,决定整个外观,其包括四大函数 CreateRectRgnIndirect CreateEllipticRgnIndirect CreatePolygonRgnCombineRgn            //个人认为比较好用的   用CreateEllipticRgnIndirect做个例子 建立一个空的项目,对话框程序。 OnInitDialog()里面 CRgn MyRgn; RECT m_rect; m_rect.left=0;m_rect.top=0;m_rect.right=500;m_rect.bottom=500; MyRgn.CreateEllipticRgnIndirect(&m_rect);  SetWindowRgn(MyRgn,true); 看看吧!hRgn确定外观的描绘!呵呵!还有其他函数,可以慢慢观看 例子2,用了CombineRgn跟踪轨迹  CDC * pDC = this->GetDC(); CFont rfont,*pOldFont; rfont.CreatePointFont(500,"隶书"); pOldFont=pDC->SelectObject(&rfont); CRgn MyRgn; pDC->BeginPath(); pDC->SetBkMode(TRANSPARENT); CString stxt = "sword2008"; pDC->SetTextColor(RGB(255,0,0)); pDC->TextOut(0,0,stxt); pDC->EndPath(); MyRgn.CreateFromPath(pDC); pDC->SelectObject(pOldFont); ReleaseDC(pDC);  SetWindowRgn(MyRgn,true);   浮动的IE按钮例子: IsMouseOn为判断是否移入按钮上 父窗口 void CTest2Dlg::OnMouseMove(UINT nFlags, CPoint point) { if(m_b1.IsMouseOn) {  m_b1.IsMouseOn=false;  m_b1.Invalidate(); } CDialog::OnMouseMove(nFlags, point);} 子窗口 CIEBUTTON::CIEBUTTON(){ IsMouseOn = false;} ---------- void CIEBUTTON::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) {  CDC ButtonDC; CBitmap bitmapTrans; BITMAP bmp; CDC  mem; CRect rc,rc2;  ButtonDC.Attach(lpDrawItemStruct->hDC); mem.CreateCompatibleDC(&ButtonDC); rc=lpDrawItemStruct->rcItem; rc2=rc;  bitmapTrans.LoadBitmap(IDB_IE); bitmapTrans.GetBitmap(&bmp); CBitmap  *old = mem.SelectObject(&bitmapTrans); int x,y; x=rc.Width()/2 - bmp.bmWidth/2; y=rc.Height()/2 - bmp.bmHeight/2; ButtonDC.BitBlt(x,y,rc.right,rc.bottom,&mem,0,0,SRCCOPY); mem.SelectObject(old);  if(IsMouseOn) {  rc.top =rc.top+1;rc.bottom =rc.bottom-1;  rc.left=rc.left+1;rc.right =rc.right-1;  ButtonDC.Draw3dRect(&rc2,RGB(255,255,255),RGB(0,0,0)); }  if(lpDrawItemStruct->itemAction &ODA_SELECT) { rc2.top =rc.top+1;rc2.bottom =rc.bottom-1; rc2.left=rc.left+1;rc2.right =rc.right-1; ButtonDC.Draw3dRect(&rc2,RGB(0,0,0,),RGB(255,255,255));// ButtonDC.Draw3dRect(&rc2,RGB(255,255,255),RGB(0,0,0)); } } void CIEBUTTON::OnMouseMove(UINT nFlags, CPoint point) { if(!IsMouseOn) {  this->IsMouseOn = true;  this->Invalidate(); }  CButton::OnMouseMove(nFlags, point);}------------- void CIEBUTTON::OnMouseMove(UINT nFlags, CPoint point) { if(!IsMouseOn) {  this->IsMouseOn = true;  this->Invalidate(); }  CButton::OnMouseMove(nFlags, point);}    

阅读(8397) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册