Edit加载PNG图片 一个对话框上有多个Edit,加载PNG图片后更新一个edit里的内容时,其它edit的数据会消失,有谁能告诉我这是什么原因造成的? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 附上代码。。更方便解决问题!!更新一个Edit 你用InvalidateRect() 刷新!! BOOL CMyEditCtrl::m_bIsCreated = FALSE;CKeysDlg* CMyEditCtrl::m_keydlg=NULL;Image * CMyEditCtrl::m_pImgNormal = NULL;Image * CMyEditCtrl::m_pImgFocus = NULL;HINSTANCE CMyEditCtrl::m_hInst = NULL;int CMyEditCtrl::nRef = 0;CMyEditCtrl::CMyEditCtrl(){ nRef++; m_brHollow.CreateStockObject(HOLLOW_BRUSH); //LoadImages(); SetImages();}CMyEditCtrl::~CMyEditCtrl(){ if (--nRef < 1 && m_hInst != NULL) FreeLibrary(m_hInst);// 记着要释放}BEGIN_MESSAGE_MAP(CMyEditCtrl, CEdit) //{{AFX_MSG_MAP(CMyEditCtrl) ON_WM_CTLCOLOR_REFLECT() ON_WM_LBUTTONUP() ON_CONTROL_REFLECT(EN_CHANGE, OnChange) //}}AFX_MSG_MAP ON_WM_ERASEBKGND() ON_CONTROL_REFLECT(EN_KILLFOCUS, &CMyEditCtrl::OnEnKillfocus) ON_WM_LBUTTONDOWN() ON_WM_DESTROY() ON_CONTROL_REFLECT(EN_SETFOCUS, &CMyEditCtrl::OnEnSetfocus)END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CMyEditCtrl message handlersHBRUSH CMyEditCtrl::CtlColor(CDC* pDC, UINT nCtlColor) { pDC->SetBkMode(TRANSPARENT); pDC->SetTextColor(RGB(244,244,244)); return m_brHollow;}void CMyEditCtrl::OnLButtonUp(UINT nFlags, CPoint point) { //Invalidate(); HWND hwnd=::GetFocus(); int iID=::GetDlgCtrlID(hwnd); if(iID==IDC_EDIT1||iID==IDC_EDIT2||iID==IDC_EDIT3||iID==IDC_EDIT4||iID==IDC_EDIT5||iID==IDC_EDIT8||iID==IDC_EDIT14||iID==IDC_EDIT15||iID==IDC_EDIT16||iID==IDC_EDIT17||iID==IDC_EDIT11||iID==IDC_EDIT12||iID==IDC_EDIT13) { CKeysDlg dlg; dlg.SetOwnerEdit(this); } dlg.DoModal(); } CEdit::OnLButtonUp(nFlags, point);}void CMyEditCtrl::OnChange() { Invalidate();}BOOL CMyEditCtrl::OnEraseBkgnd(CDC* pDC) { TRACE(_T("Erase Back\n")); pDC = GetDC(); CDC cMemDC; cMemDC.CreateCompatibleDC(pDC); CRect rect; GetClientRect(&rect); HBITMAP hMemBitmap = CreateCompatibleBitmap(pDC->GetSafeHdc(), rect.Width(),rect.Height()); SelectObject(cMemDC, hMemBitmap); Gdiplus::Graphics graphics(cMemDC); graphics.SetSmoothingMode(SmoothingModeAntiAlias); Point* pdestPoints = NULL; Point EditPoints[3] = {Point(rect.left, rect.top),Point(rect.right, rect.top),Point(rect.left, rect.bottom)}; pdestPoints = EditPoints; if (::GetFocus() == m_hWnd) { graphics.DrawImage(m_pImgFocus, pdestPoints, 3); } else { graphics.DrawImage(m_pImgNormal, pdestPoints, 3); } BitBlt(pDC->GetSafeHdc(),0,0,rect.Width(),rect.Height(), cMemDC, 0,0,SRCCOPY); DeleteObject(hMemBitmap); DeleteDC(cMemDC); return CEdit::OnEraseBkgnd(pDC); //return TRUE; }void CMyEditCtrl::PreSubclassWindow(){ // TODO: Add your specialized code here and/or call the base class m_font.CreateFont( 20, 0, 0, 0, FW_BOLD, 0, 0, 0, ANSI_CHARSET, OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, VARIABLE_PITCH | FF_SWISS,_T("宋体") ); this->SetFont(&m_font); CEdit::PreSubclassWindow();}void CMyEditCtrl::OnEnKillfocus(){ // TODO: Add your control notification handler code here Invalidate();}void CMyEditCtrl::OnLButtonDown(UINT nFlags, CPoint point){ // TODO: Add your message handler code here and/or call default CRect rect; GetClientRect(&rect); CEdit::OnLButtonDown(nFlags, point);}void CMyEditCtrl::OnEnSetfocus(){ // TODO: Add your control notification handler code here HideCaret();}bool CMyEditCtrl::LoadImageFromResource(IN Image* &pImage,IN UINT nResID, IN LPCTSTR lpTyp){ if (pImage != NULL) { return false; } HRSRC hRsrc = ::FindResource(AfxGetResourceHandle(), MAKEINTRESOURCE(nResID), lpTyp); // 查找资源 if (hRsrc == NULL) { return false; } HGLOBAL hImgData = ::LoadResource(NULL, hRsrc); // 加载资源 if (hImgData == NULL) { ::FreeResource(hImgData); return false; } LPVOID lpVoid = ::LockResource(hImgData);// 锁定内存中的指定资源 LPSTREAM pStream = NULL; DWORD dwSize = ::SizeofResource(m_hInst, hRsrc); //AfxGetResourceHandle() HGLOBAL hNew = ::GlobalAlloc(GHND, dwSize); LPBYTE lpByte = (LPBYTE)::GlobalLock(hNew); ::memcpy(lpByte, lpVoid, dwSize); ::GlobalUnlock(hNew); // 解除内存中的指定资源 HRESULT ht = ::CreateStreamOnHGlobal(hNew, TRUE, &pStream);// 从指定内存创建流对象 if ( ht != S_OK ) { GlobalFree(hNew); } else { pImage = Gdiplus::Image::FromStream(pStream); // 加载图片 GlobalFree(hNew); } ::FreeResource(hImgData); // 释放资源 return true;}void CMyEditCtrl::SetImages(){ LoadImageFromResource(m_pImgNormal, IDR_NOFOCUS_PNG, _T("png")); LoadImageFromResource(m_pImgFocus, IDR_FOCUS_PNG, _T("png")); } CMyEdit 是一个类, 它有很多实例, 你程序中 区分 各个 实例了 吗 ;GetDlgCtlID(); 我是直接继承了CMyedit,然后对编辑框添加变量! 每个Edit关联对应的一个CMyEditCtrl实例化的变量操作的时候只操作相应的控件变量 给树状结构添加新一级父节点时怎么出现断言错误?求高手帮忙 监视多用户登录的文件访问 哪位老大可以提供完整的获取数据包的vc++程序(winsoket and winpcap) 下面的语句有错吗? 关于DDB与DIB的问题??? 请大家说说扫黄网络爸爸这样的软件的思路? 使用存储过程从多个表向一个表导数据 如何手动删除windows2000中的服务程序? 靠!删了光驱模拟软件后,我的电脑里出现了两个光驱 e 、f 。但f无任何用途。无论卸载还是改注册表,重启后一切如故!请大侠指点如何去除可恶的f。 如何在切换视的同时保持视图的状态? 如何屏蔽键盘的鼠标菜单按键? 线程退出问题求解答
CKeysDlg* CMyEditCtrl::m_keydlg=NULL;
Image * CMyEditCtrl::m_pImgNormal = NULL;
Image * CMyEditCtrl::m_pImgFocus = NULL;
HINSTANCE CMyEditCtrl::m_hInst = NULL;
int CMyEditCtrl::nRef = 0;CMyEditCtrl::CMyEditCtrl()
{
nRef++;
m_brHollow.CreateStockObject(HOLLOW_BRUSH);
//LoadImages();
SetImages();}CMyEditCtrl::~CMyEditCtrl()
{
if (--nRef < 1 && m_hInst != NULL)
FreeLibrary(m_hInst);// 记着要释放
}
BEGIN_MESSAGE_MAP(CMyEditCtrl, CEdit)
//{{AFX_MSG_MAP(CMyEditCtrl)
ON_WM_CTLCOLOR_REFLECT()
ON_WM_LBUTTONUP()
ON_CONTROL_REFLECT(EN_CHANGE, OnChange)
//}}AFX_MSG_MAP
ON_WM_ERASEBKGND()
ON_CONTROL_REFLECT(EN_KILLFOCUS, &CMyEditCtrl::OnEnKillfocus)
ON_WM_LBUTTONDOWN()
ON_WM_DESTROY()
ON_CONTROL_REFLECT(EN_SETFOCUS, &CMyEditCtrl::OnEnSetfocus)
END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
// CMyEditCtrl message handlersHBRUSH CMyEditCtrl::CtlColor(CDC* pDC, UINT nCtlColor)
{
pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(RGB(244,244,244));
return m_brHollow;
}void CMyEditCtrl::OnLButtonUp(UINT nFlags, CPoint point)
{
//Invalidate();
HWND hwnd=::GetFocus();
int iID=::GetDlgCtrlID(hwnd);
if(iID==IDC_EDIT1||iID==IDC_EDIT2||iID==IDC_EDIT3||iID==IDC_EDIT4||iID==IDC_EDIT5||iID==IDC_EDIT8||iID==IDC_EDIT14||iID==IDC_EDIT15||iID==IDC_EDIT16||iID==IDC_EDIT17||iID==IDC_EDIT11||iID==IDC_EDIT12||iID==IDC_EDIT13)
{
CKeysDlg dlg;
dlg.SetOwnerEdit(this);
}
dlg.DoModal();
}
CEdit::OnLButtonUp(nFlags, point);
}void CMyEditCtrl::OnChange()
{
Invalidate();
}BOOL CMyEditCtrl::OnEraseBkgnd(CDC* pDC)
{
TRACE(_T("Erase Back\n"));
pDC = GetDC();
CDC cMemDC;
cMemDC.CreateCompatibleDC(pDC);
CRect rect;
GetClientRect(&rect);
HBITMAP hMemBitmap = CreateCompatibleBitmap(pDC->GetSafeHdc(),
rect.Width(),rect.Height());
SelectObject(cMemDC, hMemBitmap);
Gdiplus::Graphics graphics(cMemDC);
graphics.SetSmoothingMode(SmoothingModeAntiAlias);
Point* pdestPoints = NULL;
Point EditPoints[3] = {Point(rect.left, rect.top),Point(rect.right, rect.top),Point(rect.left, rect.bottom)};
pdestPoints = EditPoints; if (::GetFocus() == m_hWnd)
{
graphics.DrawImage(m_pImgFocus, pdestPoints, 3);
}
else
{
graphics.DrawImage(m_pImgNormal, pdestPoints, 3);
} BitBlt(pDC->GetSafeHdc(),0,0,rect.Width(),rect.Height(),
cMemDC, 0,0,SRCCOPY);
DeleteObject(hMemBitmap);
DeleteDC(cMemDC);
return CEdit::OnEraseBkgnd(pDC);
//return TRUE;
}
void CMyEditCtrl::PreSubclassWindow()
{
// TODO: Add your specialized code here and/or call the base class
m_font.CreateFont( 20, 0, 0, 0, FW_BOLD, 0, 0, 0, ANSI_CHARSET, OUT_TT_PRECIS,
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, VARIABLE_PITCH | FF_SWISS,_T("宋体") );
this->SetFont(&m_font);
CEdit::PreSubclassWindow();
}
void CMyEditCtrl::OnEnKillfocus()
{
// TODO: Add your control notification handler code here Invalidate();
}
void CMyEditCtrl::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CRect rect;
GetClientRect(&rect);
CEdit::OnLButtonDown(nFlags, point);
}void CMyEditCtrl::OnEnSetfocus()
{
// TODO: Add your control notification handler code here
HideCaret();}
bool CMyEditCtrl::LoadImageFromResource(IN Image* &pImage,IN UINT nResID, IN LPCTSTR lpTyp)
{
if (pImage != NULL)
{
return false;
} HRSRC hRsrc = ::FindResource(AfxGetResourceHandle(), MAKEINTRESOURCE(nResID), lpTyp); // 查找资源
if (hRsrc == NULL)
{
return false;
} HGLOBAL hImgData = ::LoadResource(NULL, hRsrc); // 加载资源
if (hImgData == NULL)
{
::FreeResource(hImgData);
return false;
} LPVOID lpVoid = ::LockResource(hImgData);// 锁定内存中的指定资源
LPSTREAM pStream = NULL;
DWORD dwSize = ::SizeofResource(m_hInst, hRsrc); //AfxGetResourceHandle()
HGLOBAL hNew = ::GlobalAlloc(GHND, dwSize);
LPBYTE lpByte = (LPBYTE)::GlobalLock(hNew);
::memcpy(lpByte, lpVoid, dwSize);
::GlobalUnlock(hNew); // 解除内存中的指定资源 HRESULT ht = ::CreateStreamOnHGlobal(hNew, TRUE, &pStream);// 从指定内存创建流对象
if ( ht != S_OK )
{
GlobalFree(hNew);
}
else
{
pImage = Gdiplus::Image::FromStream(pStream); // 加载图片
GlobalFree(hNew);
}
::FreeResource(hImgData); // 释放资源
return true;
}
void CMyEditCtrl::SetImages()
{
LoadImageFromResource(m_pImgNormal, IDR_NOFOCUS_PNG, _T("png"));
LoadImageFromResource(m_pImgFocus, IDR_FOCUS_PNG, _T("png"));
}
GetDlgCtlID();
操作的时候只操作相应的控件变量