- // My_BlackboardDlg.cpp : implementation file
- //
- #include "stdafx.h"
- #include "My_Blackboard.h"
- #include "My_BlackboardDlg.h"
- //#include "ToolBarCtrol.h"
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
- /////////////////////////////////////////////////////////////////////////////
- // CAboutDlg dialog used for App About
- #define BTNS_SHOWTEXT 0x0040
- #define TBSTYLE_EX_MIXEDBUTTONS 0x00000008
- #define RED RGB(255,0,0)
- #define GREEN RGB(0,255,0)
- #define BLUE RGB(0,0,255)
- #define WHITE RGB(255,255,255)
- #define BLACK RGB(0,0,0)
- #define YELLOW RGB(255,255,0)
- class CAboutDlg : public CDialog
- {
- public:
- CAboutDlg();
- // Dialog Data
- //{{AFX_DATA(CAboutDlg)
- enum { IDD = IDD_ABOUTBOX };
- //}}AFX_DATA
- // ClassWizard generated virtual function overrides
- //{{AFX_VIRTUAL(CAboutDlg)
- protected:
- virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
- //}}AFX_VIRTUAL
- // Implementation
- protected:
- //{{AFX_MSG(CAboutDlg)
- //}}AFX_MSG
- DECLARE_MESSAGE_MAP()
- };
- CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
- {
- //{{AFX_DATA_INIT(CAboutDlg)
- //}}AFX_DATA_INIT
- }
- void CAboutDlg::DoDataExchange(CDataExchange* pDX)
- {
- CDialog::DoDataExchange(pDX);
- //{{AFX_DATA_MAP(CAboutDlg)
- //}}AFX_DATA_MAP
- }
- BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
- //{{AFX_MSG_MAP(CAboutDlg)
- // No message handlers
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
- /////////////////////////////////////////////////////////////////////////////
- // CMy_BlackboardDlg dialog
- CMy_BlackboardDlg::CMy_BlackboardDlg(CWnd* pParent /*=NULL*/)
- : CDialog(CMy_BlackboardDlg::IDD, pParent)
- {
- //{{AFX_DATA_INIT(CMy_BlackboardDlg)
- // NOTE: the ClassWizard will add member initialization here
- //}}AFX_DATA_INIT
- // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
- m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
- }
- void CMy_BlackboardDlg::DoDataExchange(CDataExchange* pDX)
- {
- CDialog::DoDataExchange(pDX);
- //{{AFX_DATA_MAP(CMy_BlackboardDlg)
- // DDX_Control(pDX, ID_Color1, m_Color1);
- //}}AFX_DATA_MAP
- }
- BEGIN_MESSAGE_MAP(CMy_BlackboardDlg, CDialog)
- //{{AFX_MSG_MAP(CMy_BlackboardDlg)
- ON_WM_SYSCOMMAND()
- ON_WM_PAINT()
- ON_WM_QUERYDRAGICON()
- ON_COMMAND(ID_Color1, OnColor1)
- ON_COMMAND(ID_Color2, OnColor2)
- ON_COMMAND(ID_Color3, OnColor3)
- ON_COMMAND(ID_Color4, OnColor4)
- ON_COMMAND(ID_Color5, OnColor5)
- ON_COMMAND(ID_Color6, OnColor6)
- ON_WM_LBUTTONDOWN()
- ON_COMMAND(ID_DrawType1, OnDrawType1)
- ON_COMMAND(ID_DrawType2, OnDrawType2)
- ON_COMMAND(ID_DrawType3, OnDrawType3)
- ON_COMMAND(ID_DrawType4, OnDrawType4)
- ON_WM_LBUTTONUP()
- ON_WM_MOUSEMOVE()
- ON_COMMAND(ID_ChoseColor, OnChoseColor)
- ON_WM_TIMER()
- ON_COMMAND(ID_DrawType6, OnDrawType6)
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
- /////////////////////////////////////////////////////////////////////////////
- // CMy_BlackboardDlg message handlers
- BOOL CMy_BlackboardDlg::OnInitDialog()
- {
- CDialog::OnInitDialog();
- DrawStart = FALSE;
- // Add "About..." menu item to system menu.
- // IDM_ABOUTBOX must be in the system command range.
- ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
- ASSERT(IDM_ABOUTBOX < 0xF000);
- if(!Color1.Create(this, WS_CHILD | WS_VISIBLE | CBRS_ALIGN_BOTTOM | TBSTYLE_LIST , AFX_IDW_TOOLBAR) ||
- !Color1.LoadToolBar(IDR_TOOLBAR1)) //加载工具栏,CBRS_TOP表示工具栏位于顶部。IDR_TOOLBAR1是工具栏资源ID。
- {
- TRACE0("Failed to Create Dialog Toolbar\\n");
- EndDialog(IDCANCEL);
- }
- if(!Color2.Create(this, WS_CHILD | WS_VISIBLE | CBRS_ALIGN_LEFT, AFX_IDW_TOOLBAR) ||
- !Color2.LoadToolBar(IDR_TOOLBAR2)) //加载工具栏,CBRS_TOP表示工具栏位于顶部。IDR_TOOLBAR1是工具栏资源ID。
- {
- TRACE0("Failed to Create Dialog Toolbar\\n");
- EndDialog(IDCANCEL);
- }
- CRect rcClientOld;
- CRect rcClientNew;
- GetClientRect(rcClientOld); // 获取客户区RECT
- RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0,reposQuery,rcClientNew);
- CPoint ptOffset(rcClientNew.left-rcClientOld.left, rcClientNew.top-rcClientOld.top);
- CRect rcWindow;
- GetWindowRect(rcWindow); // 得到对话框RECT ,使用屏幕坐标。
- rcWindow.right += rcClientOld.Width() - rcClientNew.Width(); // 修改对话框宽度,本人认为应该没变
- rcWindow.bottom += rcClientOld.Height() - rcClientNew.Height(); //修改对话框高度,增加一个工具栏高度
- MoveWindow(rcWindow,FALSE); //把对话框移动到新rect里。主窗口移动使用屏幕坐标,和子窗口不同。
- RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);
- // m_Color1.SetButtonStyle(BS_RADIOBUTTON,TRUE);
- CMenu* pSysMenu = GetSystemMenu(FALSE);
- if (pSysMenu != NULL)
- {
- CString strAboutMenu;
- strAboutMenu.LoadString(IDS_ABOUTBOX);
- if (!strAboutMenu.IsEmpty())
- {
- pSysMenu->AppendMenu(MF_SEPARATOR);
- pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
- }
- }
- // Set the icon for this dialog. The framework does this automatically
- // when the application's main window is not a dialog
- SetIcon(m_hIcon, TRUE); // Set big icon
- SetIcon(m_hIcon, FALSE); // Set small icon
- bmpBK.LoadBitmap(IDB_BACK);
- Image.LoadBitmap(IDB_BITMAP1);
- AfxBeginThread(RecieveThread,NULL);
- SetTimer(1,100,NULL);
- return TRUE; // return TRUE unless you set the focus to a control
- }
- void CMy_BlackboardDlg::OnSysCommand(UINT nID, LPARAM lParam)
- {
- if ((nID & 0xFFF0) == IDM_ABOUTBOX)
- {
- CAboutDlg dlgAbout;
- dlgAbout.DoModal();
- }
- else
- {
- CDialog::OnSysCommand(nID, lParam);
- }
- }
- // If you add a minimize button to your dialog, you will need the code below
- // to draw the icon. For MFC applications using the document/view model,
- // this is automatically done for you by the framework.
- void CMy_BlackboardDlg::OnPaint()
- {
- if (IsIconic())
- {
- CPaintDC dc(this); // device context for painting
- SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
- // Center icon in client rectangle
- int cxIcon = GetSystemMetrics(SM_CXICON);
- int cyIcon = GetSystemMetrics(SM_CYICON);
- CRect rect;
- GetClientRect(&rect);
- dc.FillSolidRect(&rect,RGB(80,166,166));
- int x = (rect.Width() - cxIcon + 1) / 2;
- int y = (rect.Height() - cyIcon + 1) / 2;
- // Draw the icon
- dc.DrawIcon(x, y, m_hIcon);
- }
- else
- {
- CDialog::OnPaint();
- }
- }
- // The system calls this to obtain the cursor to display while the user drags
- // the minimized window.
- HCURSOR CMy_BlackboardDlg::OnQueryDragIcon()
- {
- return (HCURSOR) m_hIcon;
- }
- void CMy_BlackboardDlg::OnColor1()
- {
- Color1.ModifyStyle(0, BTNS_SHOWTEXT | TBSTYLE_EX_MIXEDBUTTONS | TBSTYLE_LIST);
- m_Color = GREEN;
- }
- void CMy_BlackboardDlg::OnColor2()
- {
- m_Color = YELLOW;
- }
- void CMy_BlackboardDlg::OnColor3()
- {
- m_Color = BLUE;
- }
- void CMy_BlackboardDlg::OnColor4()
- {
- m_Color = RED;
- }
- void CMy_BlackboardDlg::OnColor5()
- {
- m_Color = WHITE;
- BYTE r = GetRValue(m_Color);
- BYTE g = GetGValue(m_Color);
- BYTE b = GetBValue(m_Color);
- }
- void CMy_BlackboardDlg::OnColor6()
- {
- m_Color = BLACK;
- }
- void CMy_BlackboardDlg::OnDrawType1()
- {
- m_nDrawType = 1;
- }
- void CMy_BlackboardDlg::OnDrawType2()
- {
- m_nDrawType = 2;
- }
- void CMy_BlackboardDlg::OnDrawType3()
- {
- m_nDrawType = 3;
- }
- void CMy_BlackboardDlg::OnDrawType4()
- {
- m_nDrawType = 4;
- }
- void CMy_BlackboardDlg::OnLButtonDown(UINT nFlags, CPoint point)
- {
- DrawStart = TRUE;
- m_ptOrigin =point;//将鼠标左键按下的坐标保存到m_ptOrigin
- m_ptOrigin0=point;
- m_ptOrigin1=point;
- if(PicStart == TRUE)
- {
- CClientDC dc(this);
- CDC* pDC=GetDC();
- Move(point,p,pDC);
- PicStart = FALSE;
- }
- CDialog::OnLButtonDown(nFlags, point);
- }
- void CMy_BlackboardDlg::OnMouseMove(UINT nFlags, CPoint point)
- {
- // 鼠标移动时作图
- /* CClientDC dc(this);
- dc.SelectObject(&Pen);
- m_ptEnd.x=point.x;
- m_ptEnd.y=point.y;
- if(m_ptOrigin.x >= 0 && DrawStart == TRUE)
- {
- dc.MoveTo(m_ptOrigin.x,m_ptOrigin.y);
- dc.LineTo(m_ptEnd);
- m_ptOrigin.x=m_ptEnd.x;
- m_ptOrigin.y=m_ptEnd.y;
- }
- */
- m_ptEnd.x=point.x;
- m_ptEnd.y=point.y;
- if(m_ptOrigin.x >= 0 && DrawStart == TRUE)
- {
- CClientDC dc(this);
- Pen.CreatePen(PS_SOLID, 3, m_Color);
- dc.SelectObject(&Pen);
- CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
- dc.SelectObject(pBrush);
- switch(m_nDrawType)
- {
- case 1:
- {
- dc.MoveTo(m_ptOrigin);
- dc.LineTo(m_ptEnd);
- m_ptOrigin.x=m_ptEnd.x;
- m_ptOrigin.y=m_ptEnd.y;
- }
- break;
- case 2:
- {
- int nOldDrawMode = dc.SetROP2(R2_NOTXORPEN);
- dc.MoveTo(m_ptOrigin0);
- dc.LineTo(m_ptOrigin1);
- m_ptOrigin1 = m_ptEnd;
- dc.MoveTo(m_ptOrigin0);
- dc.LineTo(m_ptOrigin1);
- dc.SetROP2(nOldDrawMode);
- }
- break;
- case 3:
- {
- int nOldDrawMode = dc.SetROP2(R2_NOTXORPEN);
- dc.Ellipse(CRect(m_ptOrigin0,m_ptOrigin1));
- m_ptOrigin1 = m_ptEnd;
- dc.Ellipse(CRect(m_ptOrigin0,m_ptOrigin1));
- dc.SetROP2(nOldDrawMode);
- }
- break;
- case 4:
- {
- int nOldDrawMode = dc.SetROP2(R2_NOTXORPEN);
- dc.Rectangle(CRect(m_ptOrigin0,m_ptOrigin1));
- m_ptOrigin1 = m_ptEnd;
- dc.Rectangle(CRect(m_ptOrigin0,m_ptOrigin1));
- dc.SetROP2(nOldDrawMode);
- }
- break;
- default:
- break;
- }
- Pen.DeleteObject();
- }
- p_1.x=point.x;
- p_1.y=point.y;
- CClientDC dc(this);
- CDC* pDC=GetDC();
- int nOldDrawMode = dc.SetROP2(R2_NOTXORPEN);
- // dc.CreateCompatibleDC(pDC);
- // Move(point,p,pDC);
- dc.SetROP2(nOldDrawMode);
- CDialog::OnMouseMove(nFlags, point);
- }
- void CMy_BlackboardDlg::Move(CPoint p1,CPoint p3,CDC *pDC)
- {
- CDC dc;
- dc.CreateCompatibleDC(pDC);
- CBrush *pOldBrush;
- pOldBrush = (CBrush*)dc.SelectStockObject(NULL_BRUSH);
- // CRect rect(p1.x,p1.y,p1.x+200,p1.y+88);
- // SetRect(&m_rect,m_PointBegin.x,m_PointBegin.y,m_PointEnd.x,m_PointEnd.y);
- dc.SelectObject(pOldBrush);
- dc.SelectObject(&Image);
- TransparentBlt( pDC->m_hDC, // 目标DC
- p1.x,p1.y,// 目标偏移
- 200, 88,// 目标宽高度
- dc, // 源DC
- 0,0,// 源起点
- 200,88,// 源宽高度
- RGB(252,253,252) // 透明色,COLORREF类型
- );
- }
- void CMy_BlackboardDlg::OnLButtonUp(UINT nFlags, CPoint point)
- {
- DrawStart = FALSE;
- Pen.DeleteObject();
- CDialog::OnLButtonUp(nFlags, point);
- }
- void CMy_BlackboardDlg::OnChoseColor()
- {
- CColorDialog dlg;
- dlg.m_cc.Flags|=CC_RGBINIT | CC_FULLOPEN;//将缺省的颜色标记覆盖
- dlg.m_cc.rgbResult = m_Color;
- if(IDOK==dlg.DoModal())
- {
- m_Color = dlg.m_cc.rgbResult;
- }
- }
- void CMy_BlackboardDlg::OnTimer(UINT nIDEvent)
- {
- CDialog::OnTimer(nIDEvent);
- }
- void CMy_BlackboardDlg::DrawBK(CDC *pDC, UINT IDImage,CRect &rect, COLORREF rgbMask)
- {
- }
- void CMy_BlackboardDlg::OnDrawType6()
- {
- PicStart = TRUE;
- }
- //该片段来自于http://www.codesnippet.cn/detail/120520149528.html
来源: http://www.codesnippet.cn/detail/120520149528.html