1.在资源编辑器中将Edit控件的Border设为none(当然也可以在代码中修改窗口样式)

2.在重载CEdit的类中响应MSG_OCM_CTLCOLOREDIT消息,在处理函数中将背景模式设为透明,否则无法显示背景画刷填充效果

3.从父窗口截取控件对应位置的图片,以此图片创建画刷作为控件的背景画刷返回

4.在Edit的EN_CHANGE处理中调用Invalidate(),否则由于第一步的操作,会导致文本重叠

相关代码如下

// ACEdit.h

#pragma once

#include "ACListWnd.h"

class CACEdit : public CWindowImpl<CACEdit, CEdit> {
public:
CACEdit();
virtual ~CACEdit(); protected:
BEGIN_MSG_MAP_EX(CACEdit)
REFLECTED_COMMAND_CODE_HANDLER(EN_CHANGE, OnChange)
MSG_OCM_CTLCOLOREDIT(OnCtlColorEdit)
DEFAULT_REFLECTION_HANDLER()
END_MSG_MAP() LRESULT OnChange(UINT wNotifyCode, UINT wID, HWND hWndCtl, BOOL& bHandled);
LRESULT OnCtlColorEdit(HDC hDC, HWND hWnd); private:
CDC m_dcBk;
CBitmap m_bmpBk;
CBrush* m_pbkBrush;
};
// ACEdit.cpp

#include "stdafx.h"
#include "ACEdit.h" CACEdit::CACEdit() {
m_pbkBrush = NULL;
} CACEdit::~CACEdit() {
} LRESULT CACEdit::OnChange(UINT wNotifyCode, UINT wID, HWND hWndCtl, BOOL& bHandled) {
Invalidate();
return ;
} LRESULT CACEdit::OnCtlColorEdit(HDC hDC, HWND hWnd) {
SetBkMode(hDC, TRANSPARENT);
if(NULL == m_pbkBrush) {
CRect rect;
GetClientRect(rect);
CRect rect1;
CClientDC clDC(GetParent());
GetWindowRect(rect1);
GetParent().ScreenToClient(rect1);
m_dcBk.CreateCompatibleDC(clDC); m_backBmp.CreateCompatibleBitmap(clDC, rect.Width(), rect.Height());
m_dcBk.SelectBitmap(m_backBmp);
m_dcBk.BitBlt(,,rect.Width(),rect.Height(),clDC,rect1.left,rect1.top,SRCCOPY);
m_pbkBrush = new CBrush(CreatePatternBrush((HBITMAP)m_backBmp));
}
return (LRESULT)(m_pbkBrush->m_hBrush);
}

贴张效果图

创建透明CEdit控件的更多相关文章

  1. 创建 WPF 工具箱控件

    创建 WPF 工具箱控件 WPF (Windows Presentation Framework) 工具箱控件模板允许您创建 WPF 控件,会自动添加到 工具箱 安装扩展的安装. 本主题演示如何使用模 ...

  2. 通过WinForm控件创建的WPF控件无法输入的问题

    今天把写的一个WPF程序发布到别的机器上执行,发现一个比较奇怪的问题:在那个机器上用英文输入法无法输入数字,非要切换到中文输入法才行:但在我的机器上却是好好的. 最开始以为是输入法的问题,弄了好一阵子 ...

  3. android学习七(创建自己定义控件)

    前面学习的是android的基本控件和布局的使用,可是主要的控件和布局有时候并不能实现复杂的布局.我们来看下各种控件和布局的关系. 可见全部的控件都是直接或者间接的继承自View的,全部的布局都是直接 ...

  4. 关于如何在 Unity 的 UI 菜单中默认创建出的控件 Raycast Target 属性默认为 false

    关于如何在 Unity 的 UI 菜单中默认创建出的控件 Raycast Target 属性默认为 false 我们在 Unity 中通过 UI 菜单创建的各种控件,比如 Text, Image 等, ...

  5. React 创建自己定义控件

    React是Facebook的内部项目,当时facebook对自己市面上全部的javascript MVC都不惬意,于是就自己创建了一个新的框架.发现还挺好用.于是就开源了,这就是React. Rea ...

  6. 用swift创建各种UI控件【iSwifting社区】

    为了方便大家学习,www.iSwifting.com社区为大家准备了创建各种UI控件的代码.開始看着语法可能有些别扭,当用习惯了,就认为还是非常不错的. 社区还添加了问答专区.有问题的朋友.虽然问.大 ...

  7. IOS入门之创建视图和控件绑定

    学习IOS几天了,跟着教程做了两个小应用了,现在先来总结一下.今天就是创建视图和绑带到代码了.其实就是常见的MVC模式实现. 使用的Xcode版本是8.2. 在Xcode创建项目之后,默认就会创建一个 ...

  8. WPF 中动态创建和删除控件

    原文:WPF 中动态创建和删除控件 动态创建控件 1.容器控件.RegisterName("Name",要注册的控件)   //注册控件 2.容器控件.FindName(" ...

  9. 【WPF学习】第六十五章 创建无外观控件

    用户控件的目标是提供增补控件模板的设计表面,提供一种定义控件的快速方法,代价是失去了将来的灵活性.如果喜欢用户控件的功能,但需要修改使其可视化外观,使用这种方法就有问题了.例如,设想希望使用相同的颜色 ...

随机推荐

  1. python3 获取阿里云ECS 实例及监控的方法

    #!/usr/bin/env python3.5 # -*- coding:utf8 -*- try: import httplib except ImportError: import http.c ...

  2. 数据集下载 MNIST

    The Street View House Numbers (SVHN) Dataset SVHN is a real-world image dataset for developing machi ...

  3. js判断数组里面的值是否相等。

    var zhi=[]; var zhiT=[]; //var arr=["a","b","a","a"]; var ar ...

  4. 在sublime_text3中实现项目的跳转

    作为学习前端的小白,选择了sublime_text3作为学习的编译器.学习的过程是艰辛的,但也是快乐的.遇到自己不会的,有时候会折腾好几个小时,在实现预期效果的时候,那种兴奋真的难以言述. 今天,在学 ...

  5. hdu1032

    #include <iostream> using namespace std; int main() { int a,b,t,i,max; while(cin >> a &g ...

  6. lda 主题模型--TOPIC MODEL--Gibbslda++结果分析

    在之前的博客中已经详细介绍了如何用Gibbs做LDA抽样.(http://www.cnblogs.com/nlp-yekai/p/3711384.html) 这里,我们讨论一下实验结果: 结果文件包括 ...

  7. iOS开发系列-九宫格算法-xib

    给大家演示 应用程序下载 小项目,效果图:涉及知识点:懒加载,九宫格算法,字典转模型,自定义UIView ,xib文件的使用 首先把素材拖到Xcode项目中:简单看一下素材文件 此时大家应该首先关注. ...

  8. HTTPClient网络异常:java.lang.IllegalStateException: Content has been consumed

    在对代码进行重构时候,出现了一个异常,代码的网络请求使用的是HTTPClient: 但是其实代码中没有添加什么,只是添加了两句log: 后来发现是因为将EntityUtils.toString()方法 ...

  9. 免费DDOS攻击测试工具大合集

    FreeBuf微科普: DoS(Denial Of Service)攻击是指故意的攻击网络协议实现的缺陷或直接通过野蛮手段残忍地耗尽被攻击对象的资源,目的是让目标计算机或网络无法提供正常的服务或资源访 ...

  10. PHP 苹果消息推送

    /* * 苹果消息推送方法 * $deviceToken 苹果设备token * $message 消息内容 */ function iosmsg_send($deviceToken,$message ...