消息机制的建立 MFC

本文档详细介绍了如何在MFC中建立消息机制,通过创建CMainWindow类,并定义消息映射表,实现了窗口的创建、关闭及控件的自定义绘制。在CMainWindow的OnCreate方法中创建了一个CListBox控件并填充数据,在OnEraseBkgnd和OnCtlColor方法中自定义了背景颜色和列表框的颜色显示。
摘要由CSDN通过智能技术生成

//头文件
#include "StdAfx.h"
#include "ATPC.h"
#include "TWinApp.h"
#include "MainWindow.h"
#include "SetMineWnd.h"

CMainWindow::CMainWindow()
{
 m_pMineListBox = NULL;
}

CMainWindow::~CMainWindow(void)
{
 if( m_pMineListBox )
 {
  delete m_pMineListBox;
  m_pMineListBox = NULL;
 }
}

//创建自己的消息映射表(放在类的实现进行定义拦截消息的)
BEGIN_MESSAGE_MAP(CMainWindow,CFrameWnd)
 ON_WM_CREATE()
 ON_WM_CLOSE()
 ON_WM_CTLCOLOR()
 ON_WM_ERASEBKGND()
 //ON_COMMAND()
END_MESSAGE_MAP()

int CMainWindow::MyInit()
{
 CSetMineWnd *c_pSetMineWindow = newCSetMineWnd();
 c_pSetMineWindow->SetMineWindow();
 
 if(!CMainWindow::Create(c_pSetMineWindow->m_RectWindow->lpszClass,c_pSetMineWindow->m_RectWindow->lpszName,\
                      c_pSetMineWindow->m_RectWindow->style,c_pSetMineWindow->m_RectWindow->rect,NULL,\
       c_pSetMineWindow->m_RectWindow->hMenu,c_pSetMineWindow->m_RectWindow->dwExStyle,NULL))//构造函数直接进行窗口的创建
 {
  _tprintf(_T("CMainWindow::Createfalse\r\n"));
  return false;
 }
 //m_brush.CreateSysColorBrush(COLOR_BACKGROUND);
 return true;
}

voidCMainWindow::OnClose()
{
 ::DestroyWindow(this->m_hWnd);//销毁活动的窗口(参数是获得当前活动窗口的句柄)
 //ExitProcess(1);//完成结束全部进程
 //TerminateThread( GetCurrentThread(),0 );
 ExitThread(-1);
}

intCMainWindow::OnCreate(LPCREATESTRUCTlpcreatestruct)
{
 if( !m_pMineListBox )
 {
  m_pMineListBox = newCListBox(); 
  m_pMineListBox->Create(WS_CHILD| WS_VISIBLE| WS_VSCROLL| WS_HSCROLL| WS_TABSTOP,CRect(10,10,(10+360),(10+235)), this, 1);
 }
 
 for(int i=0; i<50; ++i)
 {
  m_pMineListBox->AddString(_T("TESTTEST TEST TEST TEST TEST TEST TEST TEST"));
 }

 return false;
 //returnCFrameWnd::OnCreate(lpcreatestruct);
}

BOOLCMainWindow::OnEraseBkgnd(CDC* pDC)
{
 CBrush backBrush(RGB(255,0,0));//建立新的画刷

 //保存旧的brush
 CBrush* pOldBrush =pDC->SelectObject(&backBrush);
 CRect rect;
 pDC->GetClipBox(&rect);//取得矩形区域的边界

 //画需要的区域
 pDC->PatBlt(rect.left, rect.top,rect.Width(), rect.Height(), PATCOPY);
 pDC->SelectObject(pOldBrush);//画刷恢复

 return TRUE;
}

HBRUSHCMainWindow::OnCtlColor(CDC* pDC, CWnd* pWnd, UINTnCtlColor)
{

 if( CTLCOLOR_LISTBOX == nCtlColor&& pWnd == m_pMineListBox )
 {
  pDC->SetTextColor(RGB(255,0,0));
  pDC->SetBkColor(RGB(0,0,255));
  //pDC->SetBkMode(OPAQUE);
  HBRUSH B =::CreateSolidBrush(RGB(255,255,255));
  return B;
 }
 return CFrameWnd::OnCtlColor(pDC, pWnd,nCtlColor);//其实不返回父类,也可以成功创建窗口控件                                            
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值