1.1.5-學習Opencv與MFC混合編程之---畫圖工具 輸入文字和填充圖像 修改光標
源代碼:http://download.csdn.net/detail/nuptboyzhb/3961696
輸入文字
l 對話框
1. 插入,資源,選擇對話框資源
2. 編輯對話框如下:
設置每一個控件的屬性。
3. 雙擊對話框,建立對話框的類,命名為:TexTSetDlg
4. 給對話框類增加公有成員變量如下:
int m_colorR;
int m_colorG;
int m_colorB;
double dlg_hscale;
double dlg_vscale;
double dlg_shear;
int dlg_thick;
CString str_text;
5. 在對話框的構造函數中,初始化成員變量。
6. 在數據交換函數中,將控件上輸入的值寫入到成員變量中。同時檢查輸入的數字是否合法。
voidTexTSetDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(TexTSetDlg)
DDX_Text(pDX,IDC_COLOR_R,m_colorR);
DDV_MinMaxInt(pDX,m_colorR, 0, 255);
DDX_Text(pDX,IDC_COLOR_G,m_colorG);
DDV_MinMaxInt(pDX,m_colorG, 0, 255);
DDX_Text(pDX,IDC_COLOR_B,m_colorB);
DDV_MinMaxInt(pDX,m_colorB, 0, 255);
//----------------------------------
DDX_Text(pDX,IDC_FONT_WIDTH,dlg_hscale);
DDV_MinMaxDouble(pDX,dlg_hscale, 0.1, 5);
DDX_Text(pDX,IDC_FONT_HIGHT,dlg_vscale);
DDV_MinMaxDouble(pDX,dlg_vscale, 0.1, 5);
DDX_Text(pDX,IDC_FONT_SHEAR,dlg_shear);
DDV_MinMaxDouble(pDX,dlg_shear, 0, 1.5);
DDX_Text(pDX,IDC_FONT_THICK,dlg_thick);
DDV_MinMaxInt(pDX,dlg_thick, 1, 20);
//--------------------------------------
DDX_Text(pDX,IDC_TEXT,str_text);
//NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
7. 為‘確認’按鍵添加消息響應函數。編輯如下:
void TexTSetDlg::OnOK()
{
//TODO: Add extra validation here
UpdateData(TRUE); // 把控件上的數據寫入成員變量
CDialog::OnOK();
}
l 對話框的使用
1. 添加‘文字’菜單項,并添加相應的消息處理函數。在消息處理函數中,設置畫圖標志;
my_draw_flag=6;
2. 編輯OnMouseMove消息處理函數。
2.1. 添加變量
TexTSetDlgdlg;
CvFont font;
double hscale;
double vscale;
double shear=0;
int fontthickness=1;
CStringtext;
2.2. 編寫case 6:的程序如下:
if (dlg.DoModal()!= IDOK)
{
OnLButtonUpRunFlag=1;
return;
}
//以下進行參數傳遞
hscale=dlg.dlg_vscale;
vscale=dlg.dlg_vscale;
shear=dlg.dlg_shear;
fontthickness=dlg.dlg_thick;
text=dlg.str_text;
colorB=dlg.m_colorB;
colorG=dlg.m_colorG;
colorR=dlg.m_colorR;
deletedlg;//刪除對話框
cvInitFont(&font,CV_FONT_HERSHEY_SIMPLEX,hscale,vscale,
shear,fontthickness);
cvFlip(src);
cvPutText(src, text,iner_point, &font, cvScalar(colorB,colorG,colorR));
cvFlip(src);
OnLButtonUpRunFlag=1;
workImg=cvCloneImage(src);//拷貝到工作區
Invalidate();//重繪
break;
Ø 增補:畫圓、矩形、橢圓時,可以畫填充圖形。
1. 在LineParameter對話框資源上,添加單選按鈕。
設置相應的屬性。
2. 為該單選按鈕添加事件處理函數OnMyDrawFull。
3. 增加BOOL型成員變量full,并在構造函數中初始化為FALSE。
4. 在單選按鈕事件處理函數中將full設置位TRUE
Ø CXXXXView中,各個菜單項的修改。
1. 在CXXXXView類中增加BOOL類型成員變量m_FullOrNot,并在構造函數中進行初始化為FALSE。
2. 在矩形,橢圓,圓菜菜單項的消息處理函數上添加對話框傳遞語句: m_FullOrNot=dlg.full;
3. 在OnMouseMove消息處理函數中,修改thickness賦值語句,將其修改為:
if(m_FullOrNot==TRUE)
{
thickness=-1;//填充
}
else
{
thickness=m_LineWidth;
}
實時修改鼠標繪圖是的光標
1. 插入,資源,選擇光標資源,新建
2. 此時資源框圖如下:
3. 用右邊的畫圖工具畫出如下光標圖形
4. 在CXXXXView類得OnMouseMove函數中添加下列語句
SetCursor(AfxGetApp()->LoadCursor(IDC_CURSOR1)); // 加載光標資源
注意添加的位置
RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成