h文件中添加
- #include "mydll.h"
- #ifdef UNICODE //区分字符集
- #define LoadLibrary LoadLibraryW
- #else
- #define LoadLibrary LoadLibraryA
- #endif // !UNICODE
-
- typedef double(*mydllPtr)(int, int);
-
-
- 类内添加:
- mydllPtr m_mydll;
cpp文件中添加
- 初始化函数中添加:
-
- HMODULE m_loadDll = LoadLibrary(TEXT("mydll.dll"));
- if (m_loadDll == NULL)
- AfxMessageBox("mydll.dll load error.");
-
- //m_mydll对应dll库中的mydll函数
- m_mydll = (mydllPtr)GetProcAddress(m_loadDll, "mydll");
-
-
- 使用时:
- m_mydll(int, int);
- //函数
- void MatToCImage(Mat& mat, CImage& cimage)
- {
- if (0 == mat.total())
- {
- return;
- }
- int nChannels = mat.channels();
- if ((1 != nChannels) && (3 != nChannels))
- {
- return;
- }
- int nWidth = mat.cols;
- int nHeight = mat.rows;
- //重建cimage
- cimage.Destroy();
- cimage.Create(nWidth, nHeight, 8 * nChannels);
- //拷贝数据
- uchar* pucRow; //指向数据区的行指针
- uchar* pucImage = (uchar*)cimage.GetBits(); //指向数据区的指针
- int nStep = cimage.GetPitch(); //每行的字节数,注意这个返回值有正有负
- if (1 == nChannels) //对于单通道的图像需要初始化调色板
- {
- RGBQUAD* rgbquadColorTable;
- int nMaxColors = 256;
- rgbquadColorTable = new RGBQUAD[nMaxColors];
- cimage.GetColorTable(0, nMaxColors, rgbquadColorTable);
- for (int nColor = 0; nColor < nMaxColors; nColor++)
- {
- rgbquadColorTable[nColor].rgbBlue = (uchar)nColor;
- rgbquadColorTable[nColor].rgbGreen = (uchar)nColor;
- rgbquadColorTable[nColor].rgbRed = (uchar)nColor;
- }
- cimage.SetColorTable(0, nMaxColors, rgbquadColorTable);
- delete[]rgbquadColorTable;
- }
- for (int nRow = 0; nRow < nHeight; nRow++)
- {
- pucRow = (mat.ptr<uchar>(nRow));
- for (int nCol = 0; nCol < nWidth; nCol++)
- {
- if (1 == nChannels)
- {
- *(pucImage + nRow * nStep + nCol) = pucRow[nCol];
- }
- else if (3 == nChannels)
- {
- for (int nCha = 0; nCha < 3; nCha++)
- {
- *(pucImage + nRow * nStep + nCol * 3 + nCha) = pucRow[nCol * 3 + nCha];
- }
- }
- }
- }
-
- }
-
-
- //使用
- CRect rect;
- GetDlgItem(IDC_STATIC_SHOW)->GetClientRect(&rect);
- CDC* pDc = GetDlgItem(IDC_STATIC_SHOW)->GetDC();
- pDc->SetStretchBltMode(COLORONCOLOR);
- CImage image;
- MatToCImage(mat, image);
- image.Draw(pDc->m_hDC, rect);
-
- CString m_serialPort;
- GetPrivateProfileString("test", "com", "", m_serialPort.GetBuffer(100), 100, "./config.ini");
-
-
- config.ini文件
- [test]
- com=3
左键按下弹起,右键按下弹起
- h文件类内添加:
- afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
- afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
- afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
-
- cpp文件中添加:
-
- BEGIN_MESSAGE_MAP(CIRCameraDemo_chaojingDlg, CDialogEx)
- ...
- ON_WM_LBUTTONDOWN()
- ON_WM_LBUTTONUP()
- ON_WM_RBUTTONDOWN()
- ...
- END_MESSAGE_MAP()
-
- void CIRCameraDemo_chaojingDlg::OnLButtonDown(UINT nFlags, CPoint point)
- {
- // TODO: 在此添加控件通知处理程序代码
-
- CDialogEx::OnLButtonDown(nFlags, point);
- }
-
- void CIRCameraDemo_chaojingDlg::OnLButtonUp(UINT nFlags, CPoint point)
- {
- // TODO: 在此添加控件通知处理程序代码
-
- CDialogEx::OnLButtonUp(nFlags, point);
- }
-
- void CIRCameraDemo_chaojingDlg::OnRButtonDown(UINT nFlags, CPoint point)
- {
- // TODO: 在此添加控件通知处理程序代码
-
- CDialogEx::OnRButtonDown(nFlags, point);
- }
- CDC* pDc = GetDlgItem(IDC_STATIC_SHOW)->GetDC();
- CBrush *pOldBrush = (CBrush*)pDc->SelectStockObject(NULL_BRUSH);
- CPen *pen = new CPen(PS_SOLID, 5, RGB(255, 0, 0));
- CPen *pOldPen = pDc->SelectObject(pen);
- pDc->Rectangle(CRect(m_startPoint, m_stopPoint));
- pDc->SelectObject(pOldPen);
- pDc->SelectObject(pOldBrush);
- delete pen;
TRACE("temp= %d\n", temp);