熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> C編程 >> 正文

橢圓窗體的實現

2022-06-13   來源: C編程 

  橢圓窗體的實現            

  . 生成橢圓形圖形界面並在上面寫斜體帶顏色的子
       在VC集成編譯環境中選擇文件新建然後選擇工程選項卡在左側的工程選擇項中選取MFC AppWizard[exe]在右側工程標題下的編輯框中輸入EllipseWindow
       單擊確定按鈕進入MFC AppWizard step選擇頁選中D基本對話框左側的單選按鈕將應用程序的類型設為基本對話框然後點擊完成按鈕後點擊確定即可

  在自動生成的IDD_ELLIPSEWINDOW_DIALOG對話框資源中刪除取消確定按鈕和標題為TODO:在這裡設置對話框的文本框此時編譯運行這個程序應該能在窗口彈出一個空的對話框

  橢圓窗體的實現主要是靠CRgn類來實現的
       
        生成橢圓窗體
       在類CEllipseWindowDlg的定義中填加CRgn m_rgnWnd的protected型變量在CEllipseWindowDlg::OnInitDialog()中加入如下代碼

  CRect rc;GetClientRect(rc);m_rgnWndCreateEllipticRgn(rcleft+rctop+rcWidth()rcHeight());SetWindowRgn((HRGN)m_rgnWndTRUE);

此時運行這個程序將出現一個灰色的橢圓窗體如果不能關閉這個應用程序可用Alt+F關閉這個程序

   按下鼠標左鍵後用鼠標拖動橢圓的實現方法
       使用類向導添加CEllipseWindowDlg的WM_MOUSEMOVE的處理函數CEllipseWindowDlg::OnMouseMove(UINT         nFlags CPoint point)代碼如下

  static CPoint p;ClientToScreen(&point);if(nFlags & MK_LBUTTON){ SetCursor(LoadCursor(NULLIDC_CROSS)); CRect rc; GetWindowRect(rc); MoveWindow(rcleft+pointxpxrctop+pointypyrcWidth()rcHeight());}p=point;

此時運行程序按下鼠標左鍵就可以拖動橢圓窗體了


      為這個窗體添加漸變的背景顏色
     在CEllipseWindowApp增加public成員函數void CEllipseWindowApp::SetBkColor()代碼為

  static BYTE x=y=z=;static BOOL flagx=TRUEflagy=FALSEflagz=TRUE;if(flagx){ x++; if(x>) flagx=FALSE;}else{ x; if(x<) flagx=TRUE;}if(flagy){ y+=; if(y>) flagy=FALSE;}else{ y=; if(y<) flagy=TRUE;}if(flagz){ z+=; if(z>) flagz=FALSE;}else{ z=; if(z<) flagz=TRUE;}SetDialogBkColor(RGB(xyz)RGB(x+y+));

此時運行程序橢圓界面的顏色就會自動發生漸變
     
     在EllipseWindowDlgcpp中加入代碼

  extern CEllipseWindowApp theApp;

在CEllipseWindosDlg中加入定時器void CEllipseWindowDlg::OnTimer(UINT nIDEvent)其中的實現代碼為:  

  theAppSetBkColor();Invalidate();

在BOOL CEllipseWindowDlg::OnInitDialog()中加入對初始化定時器代碼

  SetTimer(NULL);

在窗體上顯示歡迎詞enjoy!!!
     添加CEllipseWindowDlg的protected數據成員 CFont m_font;
     在BOOL CEllipseWindowDlg::OnInitDialog()中創建字體代碼如下

  LOGFONT lf;SystemParametersInfo(SPI_GETICONTITLELOGFONTsizeof(LOGFONT)&lfSPIF_SENDWININICHANGE);lflfHeight=;lflfEscapement=;lflfItalic=TRUE;lflfQuality=DRAFT_QUALITY;m_fontCreateFontIndirect(&lf);

在void CEllipseWindowDlg::OnPaint()中加入顯示代碼

  CPaintDC dc(this);dcSetBkMode(TRANSPARENT);dcSetTextAlign(TA_BASELINE|TA_CENTER);CRect rc;GetClientRect(rc);CFont *oldfont=dcSelectObject(&m_font);dcTextOut(rcWidth()/rcHeight()/"enjoy!!!");dcSelectObject(oldfont);

好了第一步完成了也累了have a rest :)
     檢查一下我們的成果程序運行顯示橢圓窗體顯示 enjoy!!!並且背景顏色在不停的改變按下鼠標左鍵後可以拖動

  . 增加鼠標右鍵菜單並實現總在前面和其他程序自動覆蓋的功能
       
        增加鼠標右鍵菜單
       添加資源中添加菜單資    


From:http://tw.wingwit.com/Article/program/c/201401/30252.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.