VC6【MFC】代码累积(一)

来源:互联网 发布:后台cms内容管理系统 编辑:程序博客网 时间:2024/06/11 07:03
 
  1. ● 定时器(消息处理)
  2. OnCreate消息处理中加入:
  3.     SetTimer(1,1000,NULL);
  4. OnTimer消息处理中加入:
  5.     InvalidateRect(NULL, TRUE);
  6.     UpdateWindow();
  7. ● 双缓冲
  8. 加入OnDraw()消息处理的代码
  9. // 最初的一段不使用双缓冲的代码
  10.     RECT Rect;
  11.     GetClientRect(&Rect);
  12.     static BOOL bColor = FALSE;
  13.     if(bColor)
  14.         pDC->SelectStockObject(WHITE_PEN);
  15.     else
  16.         pDC->SelectStockObject(BLACK_PEN);
  17.     bColor = !bColor;
  18.     for(int i=0; i<Rect.right; i++)
  19.     {
  20.         pDC->MoveTo(i,0);
  21.         pDC->LineTo(i, Rect.bottom);
  22.     }
  23.     
  24. //////////////////////////////////////////////
  25. // 进行双缓冲处理后的代码
  26.     RECT Rect;
  27.     GetClientRect(&Rect);
  28.     static BOOL bColor = FALSE;
  29.     CDC MemDC;
  30.     MemDC.CreateCompatibleDC(pDC);
  31.     CBitmap MemBitmap;
  32.     MemBitmap.CreateCompatibleBitmap(pDC, Rect.right, Rect.bottom);
  33.     CBitmap *pOldBitmap = MemDC.SelectObject(&MemBitmap);
  34.     if(bColor)
  35.         MemDC.SelectStockObject(WHITE_PEN);
  36.     else
  37.         MemDC.SelectStockObject(BLACK_PEN);
  38.     bColor = !bColor;
  39.     for(int i=0; i<Rect.right; i++)
  40.     {
  41.         MemDC.MoveTo(i,0);
  42.         MemDC.LineTo(i, Rect.bottom);
  43.     }
  44.     pDC->BitBlt(0, 0, Rect.right, Rect.bottom, 
  45.         &MemDC, 0, 0, SRCCOPY);
  46.     MemDC.SelectObject(pOldBitmap);
  47.     
  48.     
  49.     
  50. ● Bitmap非设备上下文兼容位图的显示
  51. 全局定义一个变量
  52. CBitmap m_Bitmap1;
  53. 构造函数中,从资源加载位图(16位)
  54.     m_Bitmap1.LoadBitmap(IDB_BITMAP1);
  55. 加入OnDraw()消息处理中的显示代码
  56.     CDC MemDC;
  57.     MemDC.CreateCompatibleDC(pDC);
  58.     CBitmap * pOldBitmap = MemDC.SelectObject(&m_Bitmap1);
  59.     
  60.     BITMAP bm1;
  61.     m_Bitmap1.GetObject(sizeof(BITMAP), &bm1);
  62.     pDC->BitBlt(10, 10, bm1.bmWidth, bm1.bmHeight, &MemDC, 0, 0, SRCCOPY);
  63.     
  64.     MemDC.SelectObject(pOldBitmap);
  65. ● 在主框架的OnCreate处理中设置窗体位置和大小
  66.     this->MoveWindow(600,100,190,120,TRUE);
  67. ●  取系统当前时间
  68.     CTime time(CTime::GetCurrentTime());
  69. ● 可点击任意位置移动的窗体.
  70. 全局:
  71. CPoint OffSetPoint;
  72. bool IS_Moved;
  73. OnLButtonDown消息事件中:
  74.     IS_Moved = true;
  75.     OffSetPoint = point;
  76. OnLButtonUp消息事件中:
  77.     IS_Moved = false;
  78. OnMouseMove消息事件中:
  79.     if(IS_Moved)
  80.     {
  81.         CRect rect; 
  82.         GetWindowRect(&rect); 
  83.         CPoint Tpoint;  
  84.         Tpoint.x = point.x - OffSetPoint.x;
  85.         Tpoint.y = point.y - OffSetPoint.y;
  86.         
  87.         this->MoveWindow(rect.left + Tpoint.x, 
  88.             rect.top + Tpoint.y, 
  89.             rect.right - rect.left,
  90.             rect.bottom - rect.top,
  91.             TRUE);
  92.     }
  93. ● 在对话框下取得DC
  94. 需要注意的是这做法不会释放资源.
  95. 千万不要放在会反复执行的地方,比如循环,计时器之类
  96.     CDC * pDC = this->GetDC(); 
  97. //------------------------------------
  98. 全局:
  99. CDC * pDC;
  100. 初始化:
  101.     pDC = this->GetDC(); 
  102. //------------------------------------
  103. 我想这是因为它是个指针,每次都是新建一个DC,然后指向.
  104. 旧的如果不释放就会成LJ,偏偏它还就没自动释放掉.
  105.     
  106.     
  107. ● 退出,通知程序结束运行.
  108.     this->PostMessage(WM_CLOSE); 
  109. ● 鼠标消息之中,将客户区坐标转换到全屏
  110.     ClientToScreen(&point);
  111. ● 放在APP的初始化里,背景色
  112.     this->SetDialogBkColor(RGB(255,255,255));
  113. ● 添回快捷菜单
  114.     CMenu menu; 
  115.     VERIFY(menu.LoadMenu(IDR_MENU1));  //载入快捷菜单资源 
  116.     ClientToScreen(&point);
  117.     CMenu* pPopup = menu.GetSubMenu(0); 
  118.     ASSERT(pPopup != NULL); 
  119.     CWnd* pWndPopupOwner = this;  //设置快捷菜单的主窗口 
  120.     while (pWndPopupOwner-> GetStyle() & WS_CHILD) 
  121.       pWndPopupOwner = pWndPopupOwner-> GetParent(); 
  122.     pPopup-> TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,
  123.         point.x, point.y, 
  124.         pWndPopupOwner); 
  125. ● 绘制一个白色矩形背景
  126.     CRect Rect(0, 0, 185, 80);
  127.     CClientDC ClientDC( this );   
  128.     CPen Pen( PS_SOLID, 1, RGB(255,255,255) );
  129.     CPen *pOldPen = (CPen *) ClientDC.SelectObject( &Pen );
  130.     ClientDC.Rectangle( &Rect );