• 大小: 18KB
    文件类型: .7z
    金币: 1
    下载: 0 次
    发布日期: 2021-05-20
  • 语言: C/C++
  • 标签: MFC  

资源简介

MFC程序, 通过windows API 控制计算机,关机, 注销, 重启

资源截图

代码片段和文件信息

// MyButton.cpp : implementation file
//

#include “stdafx.h“
#include “RESTART.h“
#include “MyButton.h“

CMyButton::CMyButton(void)

{

  m_DownColor = m_UpColor = RGB(000);//初始化设为黑色

}

CMyButton::~CMyButton(void)

{

}

 

BOOL CMyButton::Attach(const UINT nIDCWnd* pParent)

{

    if (!SubclassDlgItem(nID pParent))

    return FALSE;

    return TRUE;

}

void CMyButton::SetDownColor(COLORREFcolor)

{    //CMyButton类的函数

    m_DownColor = color;

}

void CMyButton::SetUpColor(COLORREF color)

{

    m_UpColor = color;

}

void CMyButton::DrawItem(LPDRAWITEMSTRUCTlpDrawItemStruct)

{

   CDC dc;

   dc.Attach(lpDrawItemStruct->hDC);//得到绘制的设备环境CDC

    VERIFY(lpDrawItemStruct->CtlType==ODT_BUTTON);

   //得当Button上文字这里的步骤是:1先得到在资源里编辑的按钮的文字

   //然后将此文字重新绘制到按钮上

    //同时将此文字的背景色设为透明这样按钮上仅会显示文字

    const int bufSize = 512;

    TCHAR buffer[bufSize];

    GetWindowText(buffer bufSize);

   int size=strlen(buffer);//得到长度

   DrawText(lpDrawItemStruct->hDCbuffersize&lpDrawItemStruct->rcItemDT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_TABSTOP);//绘制文字

   SetBkMode(lpDrawItemStruct->hDCTRANSPARENT);//透明

   if (lpDrawItemStruct->itemState&ODS_SELECTED)//当按下按钮时的处理

   {////重绘整个控制

         CBrush brush(m_DownColor);

          dc.FillRect(&(lpDrawItemStruct->rcItem)&brush);//利用画刷brush,填充矩形框

         //因为这里进行了重绘所以文字也要重绘

         DrawText(lpDrawItemStruct->hDCbuffersize&lpDrawItemStruct->rcItemDT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_TABSTOP);

          SetBkMode(lpDrawItemStruct->hDCTRANSPARENT);

    }

  else//当按钮不操作或者弹起时

    {

           CBrush brush(m_UpColor);

            dc.FillRect(&(lpDrawItemStruct->rcItem)&brush);//

            DrawText(lpDrawItemStruct->hDCbuffersize&lpDrawItemStruct->rcItemDT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_TABSTOP);

            SetBkMode(lpDrawItemStruct->hDCTRANSPARENT);

     }

    if ((lpDrawItemStruct->itemState&ODS_SELECTED)&&(lpDrawItemStruct->itemAction &(ODA_SELECT|ODA_DRAWENTIRE)))

     {//选中了本控件高亮边框

               COLORREF fc=RGB(255-GetRValue(m_UpColor)255-GetGValue(m_UpColor)255-GetBValue(m_UpColor));

             CBrush brush(fc);

            dc.frameRect(&(lpDrawItemStruct->rcItem)&brush);//用画刷brush,填充矩形边框

       }

     if (!(lpDrawItemStruct->itemState &ODS_SELECTED) &&(lpDrawItemStruct->itemAction & ODA_SELECT))

         {

          CBrush brush(m_UpColor); //控制的选中状态结束去掉边框

         dc.frameRect(&lpDrawItemStruct->rcItem&brush);//}

        dc.Detach();

}

评论

共有 条评论