CBtn::CBtn()
{
RegisterWndClass();
}
bool CBtn::RegisterWndClass(void)
{
WNDCLASS n;
HINSTANCE hInst=AfxGetInstanceHandle();
if(GetClassInfo(hInst,"MyBtn",&n)==0)return true;//已经存在
n.style=CS_DBLCLKS;
n.cbClsExtra=0;
n.cbWndExtra=0; n.hIcon=NULL;
n.hCursor=AfxGetApp()->LoadStandardCursor(IDC_ARROW);
n.hInstance=hInst; n.lpszClassName="MyBtn";
n.lpszMenuName=NULL;
n.lpfnWndProc=::DefWindowProcA;
if(AfxRegisterClass(&n))
{
AfxThrowResourceException();
return false;
}
return true;
} void CBtn::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: 在此处添加消息处理程序代码
// 不为绘图消息调用 CWnd::OnPaint()
DrawBtn(IDR_JPG1,"JPG");
} void CBtn::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
DrawBtn(IDB_PNG1,"PNG");
CWnd::OnLButtonDown(nFlags, point);
} void CBtn::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
DrawBtn(IDR_JPG1,"JPG");
int id=22222;////给父窗口发送项被单击消息
GetParent()->SendMessage(WM_COMMAND,MAKEWPARAM(id,0),LPARAM(this->GetSafeHwnd()));
CWnd::OnLButtonUp(nFlags, point);
} BOOL CBtn::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
SetCursor(AfxGetApp()->LoadCursorA(IDC_CURSOR1));
return true;//CWnd::OnSetCursor(pWnd, nHitTest, message);
} #include<atlimage.h>
bool CBtn::DrawBtn(int id, CString file)
{
CImage img;
HRSRC src=::FindResourceA(::AfxGetResourceHandle(),MAKEINTRESOURCE(id),file);
if(src==NULL)return false;
HGLOBAL data=::LoadResource(::AfxGetResourceHandle(),src);// 加载资源
if(data==NULL){::FreeResource(data);return false;}
LPVOID lp=::LockResource(data);// 锁定内存中的指定资源
LPSTREAM is;
DWORD size=::SizeofResource(::AfxGetResourceHandle(),src);
HGLOBAL hg=::GlobalAlloc(GHND,size);
LPBYTE by=(LPBYTE)::GlobalLock(hg);
::memcpy(by,lp,size);
::GlobalUnlock(hg);// 解除内存中的指定资源
HRESULT res=::CreateStreamOnHGlobal(hg,true,&is);// 从指定内存创建流对象
if(res!=S_OK)::GlobalFree(hg);
else {img.Load(is);::GlobalFree(hg);}
::FreeResource(data);// 释放资源
COLORREF ref=RGB(0,0,0);
if(img.GetBPP()==32)//确认该图像包含Alpha通道
{
for(int i=0;i<img.GetWidth();i++)
for(int j=0;j<img.GetHeight();j++)
{
LPBYTE by=(LPBYTE)img.GetPixelAddress(i,j);
by[0]=by[0]*by[3]/255;
by[1]=by[1]*by[3]/255;
by[2]=by[2]*by[3]/255;
}
ref=img.GetPixel(0,0);
}
CClientDC dc(this);
dc.SetStretchBltMode(3);//4
::SetBrushOrgEx(dc,0,0,NULL);
CRect rc;GetClientRect(&rc);
img.SetTransparentColor(ref);
img.Draw(dc.m_hDC,0,0,rc.Width(),rc.Height()); CString s="按钮";
CFont *font=dc.SelectObject(CFont::FromHandle((HFONT)GetStockObject(DEFAULT_GUI_FONT)));
dc.SetTextColor(RGB(255,0,0));
dc.SetBkMode(TRANSPARENT);
dc.DrawText(s,s.GetLength(),rc,DT_SINGLELINE|DT_VCENTER|DT_CENTER);
return true;
}
void CMyBtnDlg::OnBnClickedButton1()
{
b.Create(NULL,NULL,WS_VISIBLE|WS_CHILD,CRect(0,0,100,100),this,NULL,NULL);
} #include<atlimage.h>
void CMyBtnDlg::OnMyBtn(void)
{
//AfxMessageBox("我的按钮事件");
CWnd *pwnd=CWnd::GetDesktopWindow();//屏幕
CWindowDC dc(pwnd);
CRect rc;
pwnd->GetWindowRect(&rc);
int pix=dc.GetDeviceCaps(BITSPIXEL)*dc.GetDeviceCaps(PLANES);
CImage img;
img.Create(rc.Width(),rc.Height(),pix);
CImageDC mdc(img);
::BitBlt(mdc,0,0,rc.Width(),rc.Height(),dc,0,0,SRCCOPY);
img.Save("C:\\j.jpg");
}

MFC CWnd仿按钮的更多相关文章

  1. [MFC] 高仿Flappy bird 桌面版

    这是今年年初做的东西,一直没有时间整理,现在拿出来分享下~ 目录 开发背景 开发语言及运行环境 效果展示 游戏框架说明 游戏状态及逻辑说明 经典算法说明 重量级问题解决 开发感想 一.开发背景: fl ...

  2. MFC 使用位图按钮,并且设置按钮的鼠标悬停效果

    系统环境:Windows 10软件环境:Visual C++ 2013 SP1本次目的:使用位图按钮,并且设置按钮的鼠标悬停效果 在用MFC开发时,界面是比较不好开发的一块.VC中自带了CBitmap ...

  3. MFC之CToolTipCtrl按钮提示(消息捕获和消息传递)

    记得以前写对话框时,按钮直接有一个tips属性,可以添加默认值,不记得是C#还是啥了,今天忽然想给几个按钮添加提示信息,就捣鼓了一下. 头文件中创建CToolTipCtrl变量,然后在初始化时激活使用 ...

  4. MFC 动态创建按钮

    首先在对话框(模式对话框,无模式对话框)中添加一个ADD按钮,通过点击按钮产生的通告消息调用::OnBtnAdd()方法.此方法会在对话框的左上角创建一个按钮. 当然首先要在和次对话框相关联的类中添加 ...

  5. MFC 点击按钮,弹出另一个对话框(模态及非模态对话框)

    1. 模态对话框 资源视图->Dialog->右键->添加资源->新建->对话框->右键->添加类. 例如:在A_dialog中点击按钮弹出B_dialog  ...

  6. MFC自绘按钮的实现,按钮动态效果

    最近项目需要实现按钮的动态效果,多方学习,现在终于能实现一些功能了. 过程如下: 第一,新建一MFC对话框应用程序. 第二,删除自带按钮,并添加两个按钮,button1,button2,ID为IDB_ ...

  7. MFC动态创建按钮,并在按钮上实现位图的切换显示

    动态创建按钮,并在按钮中添加位图,通过单击按钮显示不同的位图,可设置为显示按钮按下和弹起两种状态.只要判断a值从而输入不同的响应代码. 1.在头文件中添加: CButton *pBtn; 2.在初始化 ...

  8. mfc自动创建按钮消息处理并清除

        以前参加一次面试有这道题,当时没有网络没有做出来,今天在网上整理了一下,实现如下. .h中增加下面代码     //生成的消息映射函数     virtual BOOL OnInitDialo ...

  9. MFC 自绘按钮 消息响应

    单检测到按下消息时,发送一个消息 m_pParent->PostMessage(WM_COMMAND, IDC_BUTTON1); 然后再在消息映射里建立映射. ON_COMMAND(IDC_B ...

随机推荐

  1. CodeForces 190A Vasya and the Bus

    本题是比较简单的,有几个坑要注意一下: 1.n==0&&m!=0  时输出 "Impossible" : 2.n==0&&m==0 时输出 ”0 0 ...

  2. SQL Server 连接和事务相关的问题。

    方法 1. dbcc opentran + sys.dm_exec_connections dbcc opentran; dbcc opentran 针对当前数据库 dbcc opentran('St ...

  3. 分享5个主流的HTML5开发工具

    HTML5被看做是web开发者创建流行web应用的利器,增加了对视频和Canvas 2D的支持.用HTML5的优点主要在于,这个技术可以进行跨平台的使用.比如你开发了一款HTML5的游戏,你可以很轻易 ...

  4. 14.3.5 LOCK TABLES and UNLOCK TABLES Syntax

    14.3.5 LOCK TABLES and UNLOCK TABLES Syntax LOCK TABLES tbl_name [[AS] alias] lock_type [, tbl_name ...

  5. Java webservice

    webservice:     就是应用程序之间跨语言的调用    1.xml    2.    wsdl: webservice description language web服务描述语言     ...

  6. hdu 4740 The Donkey of Gui Zhou(dfs模拟好题)

    Problem Description There was no donkey ,) , the down-right cell ,N-) and the cell below the up-left ...

  7. C++ 顶层 const

    我的主力博客:半亩方塘 本文的主要參考来源来自于:C++ Primer 中文版(第 5 版) 第 57 面至第 58 面 1. 顶层 const 与底层 const 概念 我们知道,指针本身是一个对象 ...

  8. URAL 1736 Chinese Hockey 网络流+建图

    题目链接:点击打开链接 题意: 给定n个队伍的得分情况,输出随意一个可行解. n个队伍随意2个队伍 a, b 间有且仅有一场比赛. 比赛结果分4种: 1.a +3, b +0 2.a +0, b +3 ...

  9. 【最小费用最大流】【HDU1533】【Going Home】

    题意 给你一个类似这样的图 ...H.... ...H.... ...H.... mmmHmmmm ...H.... ...H.... ...H.... 问所有H移动到所有m上花费最少的步数 以所有H ...

  10. SharePoint 2013 代码实现自定义的站点模版创建Site Collection

    先需要将自定义的站点模版从网站集转移到Farm中. 找一个自己已经完成配置及设计的网站,在网站设置里面选择另存为模版.要注意的是不是所有的站点类型都有另存为模版的功能. 存完之后可在解决方案库的界面里 ...