日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

获取对话框当前cfont_MFC设置对话框、字体对话框、颜色对话框(转)

發布時間:2023/12/14 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 获取对话框当前cfont_MFC设置对话框、字体对话框、颜色对话框(转) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、繪圖

新建一個工程Graphic。添加一個菜單“繪圖”,在這個菜單中添加四個菜單項,分別為點(IDM_DOT)、直線(IDM_LINE)、矩形(IDM_RECTANGLE)和橢圓(IDM_ELLIPSE)。分別為這四個菜單項添加命令響應。在每個命令響應函數中保存用戶的選擇,定義成員變量UINT

m_nDrawType

private保存用戶的選擇。在CGraphicView的構造方法中初始化m_nDrawType=0。在OnDot、OnLine、OnRectangle和OnEllipse響應函數中分別設置這個成員變量的值為1、2、3、4。分別捕獲鼠標左鍵按下和松開的消息WM_LBUTTONDOWN和WM_LBUTTONUP。在WM_LBUTTONDOWN中將鼠標按下的這個點保存,在View類中添加成員變量CPoint

m_ptOrgin

private,在構造函數中初始化為0。在OnButtonDownh函數總保存這個點到成員變量中m_ptOrigin=point。

鼠標松開的響應函數ONBUTTONUP中代碼如下:

CClientDC dc(this);

CPen pen(PS_SOLID,1,RGB(255,0,0));

dc.SelectObject(&pen);

CBrush

*pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));

dc.SelectObject(pBrush);

switch(m_nDrawType)

{

case 1:

dc.SetPixel(point,RGB(255,0,0));

break;

case 2:

dc.MoveTo(m_ptOrigin);

dc.LineTo(point);

break;

case 3:

dc.Rectangle(CRect(m_ptOrigin,point));

break;

case 4:

dc.Ellipse(CRect(m_ptOrigin,point));

break;

}

二、設置對話框

1、設置線寬

插入一個對話框:IDI_DLG_SETTING

setting。在對話框上添加一個靜態文本框:線寬,一個編輯框:IDC_LINE_WIDTH。雙擊對話框創建一個對話框的類:CSettingDlg。點右鍵給編輯框控件關聯成員變量:m_nLineWidth

UINT。增加設置菜單項:IDM_SETTING 設置,給菜單項添加命令響應OnSetting,選擇view類。

響應函數中的代碼如下:

CSettingDlg dlg;

dlg.DoModal();

在view類中增加保存對話框中設置的線寬的成員變量:UINT m_nLineWidth

private。在構造函數中初始化為0。

設置菜單項響應函數OnSetting的代碼修改如下:

CSettingDlg dlg;

dlg.m_nLineWidth=m_nLineWidth;

if(IDOK==dlg.Domal())

{

m_nLineWidth=dlg.m_nLineWidth;

}

將WM_LBUTTONUP響應函數中的畫筆修改為:CPen

pen(PS_SOLID,m_nLineWidth,RGB(255,0,0);

2、設置線型

在對話框中放置一個組框和三個單選按鈕,三個單選按鈕名稱分別為:實線、虛線和點線。第一個勾選Group。給單選按鈕關聯成員變量:m_nLineStyle

int。在view類中增加成員變量int m_nLineStyle

private。初始化為0。在OnSetting響應函數中當用戶點擊Ok的時候保存起來:

CSettingDlg dlg;

dlg.m_nLineWidth=m_nLineWidth;

dlg.m_nLineStyle=m_nLineStyle;

if(IDOK==dlg.Domal())

{

m_nLineWidth=dlg.m_nLineWidth;

m_nLineStyle=dlg.m_nLineStyle;

}

將WM_LBUTTONUP響應函數中的畫筆修改為:CPen

pen(m_nLineStyle,m_nLineWidth,RGB(255,0,0);不需要再用switch

case語句,因為三種畫筆的定義和我們的定義的值是一致的。

三、顏色對話框

增加菜單項:IDM_COLOR 顏色。添加命令響應:OnColor。在view類中增加成員變量:COLORREF m_clr

private,用來保存用戶的顏色選擇,在構造方法中初始化m_clr=RGB(255,0,0)。

void CGraphicView::OnColor()

{

CColorDialog dlg;

dlg.m_cc.Flags | =CC_RGBINIT;

dlg.m_cc.rgbResult=m_clr;//記住用戶的顏色選擇

if(IDOK==dlg.DoModal())

{

m_clr=dlg.m_cc.rgbResult;

}

}

四、字體對話框

添加菜單項:IDM_FONT 字體。增加響應函數OnFont。增加成員變量CFont m_font

private。增加保存字體名字的成員變量CString m_strFontName?private,并初始化。

void CGraphicView::OnFont()

{

CFontDialog dlg;

if(IDOK==dlg.DoModal())

{

if(m_font.m_hObject)

m_font.DeleteObject();

m_font.CreateFontIndirect(dlg.m_cf.lpLogFont);

m_strFontName=dlg.m_cf.lpLogFont->lfFaceName;

Invalidate();

}

}

在OnDraw響應函數中加入如下代碼:

CFont *oldFont=pDC->SelectObject(&m_font);

pDC->TextOut(0,0,m_strFontName);

pDC->SelectObject(oldFont);

五、示例功能

在設置對話框中增加一個組框:IDC_SAMPLE

示例。添加編輯框消息響應函數EN_CHANGE,三個單選按鈕分別添加消息響應函數BN_CLICKED。在四個函數中調用:Invalidate();

在CSettingDlg類中點右鍵,選擇WM_PAINT。

void CSettingDlg::OnPaint()

{

CPaintDC dc(this);

UpdateData();

CPen pen(m_nLineStyle,m_nLineWidth,RGB(255,0,0));

dc.SelectObject(&pen);

CRect rect;

GetDlgItem(IDC_SAMPLE)->GetWindowRect(&rect);//GetWindowRect獲得的是屏幕的坐標

ScreenToClient(&rect);//將屏幕坐標轉換為對話框坐標。

dc.MoveTo(rect.left+20,rect.top+rect.Height()/2);

dc.LineTo(rect.right-20,rect.top+rect.Height()/2);

}

設置示例顏色,在CSettingDlg類中增加成員變量:COLORREF m_clr

public,并初始化m_ctr=RGB(255,0,0)。在View類的OnSetting函數中將View類保存的顏色值傳遞給對話框的成員變量:dlg.m_clr=m_clr;將OnPaint函數中的畫筆修改:CPen

pen(m_nLineStyle,m_nLineWidth,m_clr);

六、改變對話框背景色,對話框中控件的背景色

1、改變對話框背景

參考:WM_CTLCOLOR (OnCtlColor)

在CSettingDlg類中添加響應函數OnCtlColor。添加成員變量:CBrush m_brush

private,并初始化:m_brush.CreateSolidBrush(RGB(0,0,255))。在OnCtrColor函數中加入代碼:return

m_brush;

改變組框背景色,設置組框ID:IDC_LINE_STYLE。OnCtlColor會被調用多次。

HBRUSH CSettingDlg::OnCtlColor(CDC *pDC,CWnd *pWnd,UINT

nCtlColor)

{

HBRUSH hbr=CDialog::OnCtlColor(pDC,pWnd,nCtlColor);

if(pWnd->GetDlgCtlId()==IDC_LINE_STYLE)

{

pDC->SetTextColor(RGB(255,0,0));

pDC->SetBkMode(TRANSPARENT);

return m_brush;

}

if(pWnd->GetDlgCtlId()==IDC_LINE_WIDTH)

{

pDC->SetTextColor(RGB(255,0,0));

pDC->SetBkColor(RGB(0,0,255));

return m_brush;

}

return hbr;

}

2、對話框中的文本按照我們設定的字體顯示

在設置對話框中增加一個文本框:IDC_TEXT 程序員。在CSettingDlg類中增加成員變量:CFont m_font

private,初始化:m_font.CreatePointFont(200,"華文行楷");在OnCtlColor函數中添加以下代碼:

if(pWnd->GetDlgCtlId()==IDC_TEXT)

{

pDC->SelectObject(&m_font);

}

3、改變OK按鈕的文本色

參考:CBtton;;DrawItem

添加新類:CTestBtn ,基類選擇CButton。CTestBtn->Add virtual

function->DrawItem

void CTestBtn::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)

{

UINT uStyle=DFCS_BUTTONPUSH;

ASSERT(lpDrawItemStruct->CtlType==ODT_BUTTON);

if(lpDrawItemStruct->itemState&ODS_SELECTED)

uStyle | =DFCS_PUSHED;

::DrawFrameControl(lpDrawItemStruct->hDC,&lpDrawItemStruct->rcItem,DFC_BUTTON,uStyel);

CString strText;

GetWindowText(strText);

COLORREF

crOldColor=::SetTextColor(lpDrawItemStruct->hDC,RGB(255,0,0));

::DrawText(lpDrawItemStruct->hDC,strText,strText.GetLength(),&lpDrawItemStruct->rcItem,DT_SINGLELINE

| DT_VCENTER | DT_CENTER);

::SetTextColor(lpDrawItemStruct->hDC,crOldColor);

}

為設置對話框的ok按鈕關聯成員變量m_btnTest CTestBtn。設置對話框的OK按鈕的屬性styles中的Owner

Draw勾選。

七、如何在窗口中顯示位圖

1、創建位圖

CBitmap bitmap;

bitmap.LoadBitmap(IDB_BITMAP1);

2、創建兼容DC

CDC dcCompatible;

dcCompatible.CreateCompatibleDC(pDC);

3、將位圖選到兼容DC中

dcCompatible.SelectObject(&bitmap);

4、將兼容DC中的位圖貼到當前DC中。

pDC->BitBlt(rect.left,rect.top,rect.Width(),

rect.Height(),&dcCompatible,0,0,SRCCOPY);

位圖背景可以在窗口擦除OnEraseBkgnd和OnDraw響應函數中實現。

擦除窗口,增加WM_ERASE響應函數。

BOOL CGraphicView::OnEraseBkgnd(CDC* pDC)

{

// TODO: Add your message handler code here

and/or call default

CBitmap bitmap;

bitmap.LoadBitmap(IDB_BITMAP1);

BITMAP bmp;

bitmap.GetBitmap(&bmp);

CDC dcCompatible;

dcCompatible.CreateCompatibleDC(pDC);

dcCompatible.SelectObject(&bitmap);

CRect rect;

GetClientRect(&rect);

//

pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,0,0,SRCCOPY);

pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,

0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);

return TRUE;

// return CView::OnEraseBkgnd(pDC);

}

總結

以上是生活随笔為你收集整理的获取对话框当前cfont_MFC设置对话框、字体对话框、颜色对话框(转)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。