Edit加载PNG图片

等待一场救赎 2013-02-25 01:18:45
一个对话框上有多个Edit,加载PNG图片后更新一个edit里的内容时,其它edit的数据会消失,有谁能告诉我这是什么原因造成的?
...全文
234 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiao_Evelyn 2013-02-25
  • 打赏
  • 举报
回复
引用 8 楼 shen_wei 的回复:
引用 5 楼 zhangxiaojingyh 的回复:引用 3 楼 shen_wei 的回复:方便的话,可以发个邮件,这样看整体代码!! 可是我不知道你的邮箱号码啊? shenweiwei2005@sina.com
已发到你邮箱,期待你的解答!
shen_wei 2013-02-25
  • 打赏
  • 举报
回复
引用 5 楼 zhangxiaojingyh 的回复:
引用 3 楼 shen_wei 的回复:方便的话,可以发个邮件,这样看整体代码!! 可是我不知道你的邮箱号码啊?
shenweiwei2005@sina.com
这不是鸭头 2013-02-25
  • 打赏
  • 举报
回复
每个Edit关联对应的一个CMyEditCtrl实例化的变量 操作的时候只操作相应的控件变量
等待一场救赎 2013-02-25
  • 打赏
  • 举报
回复
引用 4 楼 schlafenhamster 的回复:
CMyEdit 是一个类, 它有很多实例, 你程序中 区分 各个 实例了 吗 ; GetDlgCtlID();
我是直接继承了CMyedit,然后对编辑框添加变量!
等待一场救赎 2013-02-25
  • 打赏
  • 举报
回复
引用 3 楼 shen_wei 的回复:
方便的话,可以发个邮件,这样看整体代码!!
可是我不知道你的邮箱号码啊?
schlafenhamster 2013-02-25
  • 打赏
  • 举报
回复
CMyEdit 是一个类, 它有很多实例, 你程序中 区分 各个 实例了 吗 ; GetDlgCtlID();
shen_wei 2013-02-25
  • 打赏
  • 举报
回复
方便的话,可以发个邮件,这样看整体代码!!
等待一场救赎 2013-02-25
  • 打赏
  • 举报
回复
引用 1 楼 shen_wei 的回复:
附上代码。。更方便解决问题!! 更新一个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 handlers HBRUSH 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")); }
shen_wei 2013-02-25
  • 打赏
  • 举报
回复
附上代码。。更方便解决问题!! 更新一个Edit 你用InvalidateRect() 刷新!!

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧