橢圓窗體的實現
. 生成橢圓形圖形界面並在上面寫斜體帶顏色的子
在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+));
此時運行程序
橢圓界面的顏色就會自動發生漸變
在EllipseWindowDlg
cpp中加入代碼
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