BOOL CTaskbarNotifier::SetBitmap(LPCTSTR pszFileName, int red, int green, int blue) { if (pszFileName == NULL || pszFileName[0] == _T('\0')) return FALSE; CEnBitmap Bitmap; if (!Bitmap.LoadImage(pszFileName)) return FALSE; m_bitmapBackground.DeleteObject(); if (!m_bitmapBackground.Attach(Bitmap.Detach())) return FALSE; BITMAP bm; m_bitmapBackground.GetBitmap(&bm); m_nBitmapWidth = bm.bmWidth; m_nBitmapHeight = bm.bmHeight; m_bBitmapAlpha = false; if (red != -1 && green != -1 && blue != -1) { // No need to delete the HRGN, SetWindowRgn() owns it after being called m_hBitmapRegion = CreateRgnFromBitmap(m_bitmapBackground, RGB(red, green, blue)); SetWindowRgn(m_hBitmapRegion, TRUE); } return TRUE; }
void CMuleToolbarCtrl::ChangeToolbarBitmap(const CString& path, bool bRefresh) { bool bResult = false; CImageList ImageList; CEnBitmap Bitmap; if (!path.IsEmpty() && Bitmap.LoadImage(path)) { BITMAP bm = {0}; Bitmap.GetObject(sizeof(bm), &bm); if (bm.bmWidth == NUM_BUTTON_BITMAPS*m_sizBtnBmp.cx && bm.bmHeight == m_sizBtnBmp.cy) { bool bAlpha = bm.bmBitsPixel > 24; if (ImageList.Create(m_sizBtnBmp.cx, bm.bmHeight, bAlpha ? ILC_COLOR32 : (theApp.m_iDfltImageListColorFlags | ILC_MASK), 0, 1)) { ImageList.Add(&Bitmap, bAlpha ? 0xFF000000 : RGB(255, 0, 255)); CImageList* pimlOld = SetImageList(&ImageList); ImageList.Detach(); if (pimlOld) pimlOld->DeleteImageList(); bResult = true; } } Bitmap.DeleteObject(); } // if image file loading or image list creation failed, create default image list. if (!bResult) { // load from icon ressources ImageList.Create(m_sizBtnBmp.cx, m_sizBtnBmp.cy, theApp.m_iDfltImageListColorFlags | ILC_MASK, 0, 1); ImageList.Add(CTempIconLoader(_T("CONNECT"), m_sizBtnBmp.cx, m_sizBtnBmp.cy)); ImageList.Add(CTempIconLoader(_T("DISCONNECT"), m_sizBtnBmp.cx, m_sizBtnBmp.cy)); ImageList.Add(CTempIconLoader(_T("STOPCONNECTING"), m_sizBtnBmp.cx, m_sizBtnBmp.cy)); ImageList.Add(CTempIconLoader(_T("KADEMLIA"), m_sizBtnBmp.cx, m_sizBtnBmp.cy)); ImageList.Add(CTempIconLoader(_T("SERVER"), m_sizBtnBmp.cx, m_sizBtnBmp.cy)); ImageList.Add(CTempIconLoader(_T("TRANSFER"), m_sizBtnBmp.cx, m_sizBtnBmp.cy)); ImageList.Add(CTempIconLoader(_T("SEARCH"), m_sizBtnBmp.cx, m_sizBtnBmp.cy)); ImageList.Add(CTempIconLoader(_T("SharedFiles"), m_sizBtnBmp.cx, m_sizBtnBmp.cy)); ImageList.Add(CTempIconLoader(_T("MESSAGES"), m_sizBtnBmp.cx, m_sizBtnBmp.cy)); ImageList.Add(CTempIconLoader(_T("IRC"), m_sizBtnBmp.cx, m_sizBtnBmp.cy)); ImageList.Add(CTempIconLoader(_T("STATISTICS"), m_sizBtnBmp.cx, m_sizBtnBmp.cy)); ImageList.Add(CTempIconLoader(_T("PREFERENCES"), m_sizBtnBmp.cx, m_sizBtnBmp.cy)); ImageList.Add(CTempIconLoader(_T("TOOLS"), m_sizBtnBmp.cx, m_sizBtnBmp.cy)); ImageList.Add(CTempIconLoader(_T("HELP"), m_sizBtnBmp.cx, m_sizBtnBmp.cy)); ASSERT( ImageList.GetImageCount() == NUM_BUTTON_BITMAPS ); CImageList* pimlOld = SetImageList(&ImageList); ImageList.Detach(); if (pimlOld) pimlOld->DeleteImageList(); } if (bRefresh) { UpdateBackground(); Invalidate(); Refresh(); } }
BOOL CTaskbarNotifier::LoadConfiguration(LPCTSTR szFileName) { TCHAR szConfigDir[MAX_PATH]; int nRed, nGreen, nBlue, sRed, sGreen, sBlue; int rcLeft, rcTop, rcRight, rcBottom; int bmpTrasparentRed, bmpTrasparentGreen, bmpTrasparentBlue; int fontSize; CString fontType, bmpFullPath, strBmpFileName; Hide(); m_strConfigFilePath = szFileName; CIni ini(szFileName, _T("CONFIG")); _tcsncpy(szConfigDir, szFileName, _countof(szConfigDir)); szConfigDir[_countof(szConfigDir)-1] = _T('\0'); LPTSTR pszFileName = _tcsrchr(szConfigDir, _T('\\')); if (pszFileName == NULL) return FALSE; *(pszFileName + 1) = _T('\0'); nRed = ini.GetInt(_T("TextNormalRed"),255); nGreen = ini.GetInt(_T("TextNormalGreen"),255); nBlue = ini.GetInt(_T("TextNormalBlue"),255); sRed = ini.GetInt(_T("TextSelectedRed"),255); sGreen = ini.GetInt(_T("TextSelectedGreen"),255); sBlue = ini.GetInt(_T("TextSelectedBlue"),255); bmpTrasparentRed = ini.GetInt(_T("bmpTrasparentRed"),255); bmpTrasparentGreen = ini.GetInt(_T("bmpTrasparentGreen"),0); bmpTrasparentBlue = ini.GetInt(_T("bmpTrasparentBlue"),255); fontType = ini.GetString(_T("FontType"), _T("MS Shell Dlg")); fontSize = ini.GetInt(_T("FontSize"), 8) * 10; m_dwTimeToStay = ini.GetInt(_T("TimeToStay"), 4000); m_dwTimeToShow = ini.GetInt(_T("TimeToShow"), 500); m_dwTimeToHide = ini.GetInt(_T("TimeToHide"), 200); strBmpFileName = ini.GetString(_T("bmpFileName"), _T("")); if (!strBmpFileName.IsEmpty()) { if (PathIsRelative(strBmpFileName)) bmpFullPath.Format(_T("%s%s"), szConfigDir, strBmpFileName); else bmpFullPath = strBmpFileName; } // get text rectangle coordinates rcLeft = ini.GetInt(_T("rcTextLeft"),5); rcTop = ini.GetInt(_T("rcTextTop"),45); rcRight = ini.GetInt(_T("rcTextRight"),220 ); rcBottom = ini.GetInt(_T("rcTextBottom"), 85); if (rcLeft<=0) rcLeft=1; if (rcTop<=0) rcTop=1; if (rcRight<=0) rcRight=1; if (rcBottom<=0) rcBottom=1; SetTextRect(CRect(rcLeft,rcTop,rcRight,rcBottom)); // get close button rectangle coordinates rcLeft = ini.GetInt(_T("rcCloseBtnLeft"),286); rcTop = ini.GetInt(_T("rcCloseBtnTop"),40); rcRight = ini.GetInt(_T("rcCloseBtnRight"), 300); rcBottom = ini.GetInt(_T("rcCloseBtnBottom"), 54); if (rcLeft<=0) rcLeft=1; if (rcTop<=0) rcTop=1; if (rcRight<=0) rcRight=1; if (rcBottom<=0) rcBottom=1; SetCloseBtnRect(CRect(rcLeft,rcTop,rcRight,rcBottom)); // get history button rectangle coordinates rcLeft = ini.GetInt(_T("rcHistoryBtnLeft"),283); rcTop = ini.GetInt(_T("rcHistoryBtnTop"),14); rcRight = ini.GetInt(_T("rcHistoryBtnRight"), 299); rcBottom = ini.GetInt(_T("rcHistoryBtnBottom"), 39); if (rcLeft<=0) rcLeft=1; if (rcTop<=0) rcTop=1; if (rcRight<=0) rcRight=1; if (rcBottom<=0) rcBottom=1; SetHistoryBtnRect(CRect(rcLeft,rcTop,rcRight,rcBottom)); if (bmpFullPath.IsEmpty() || !SetBitmap(bmpFullPath, bmpTrasparentRed, bmpTrasparentGreen, bmpTrasparentBlue)) { CEnBitmap imgTaskbar; if (imgTaskbar.LoadImage(IDR_TASKBAR, _T("GIF"))) { if (!SetBitmap(&imgTaskbar, bmpTrasparentRed, bmpTrasparentGreen, bmpTrasparentBlue)) return FALSE; } } SetTextFont(fontType, fontSize, TN_TEXT_NORMAL,TN_TEXT_UNDERLINE); SetTextColor(RGB(nRed, nGreen, nBlue), RGB(sRed, sGreen, sBlue)); return TRUE; }
LRESULT CChatBkDlg::OnPreSendMsg(WPARAM wParam, LPARAM lParam) { switch (wParam) { case 0: if (m_pMsgEdit->GetRichEditCtrl().GetSafeHwnd() && m_pMsgEdit->GetRichEditCtrl().GetTextLength()) { clock_t clr0 = clock(); //将字符串插入到整个内容的最前面 m_pMsgEdit->GetRichEditCtrl().HideSelection(TRUE, FALSE); m_pMsgEdit->GetRichEditCtrl().SetSel(0, -1); m_pMsgEdit->GetRichEditCtrl().SetSelectionCharFormat(m_defaultCharFormat); CMemFile memFile(m_pBuf, BUFLEN); memFile.SeekToBegin(); ///////////////////////将整个 RichView中的内容写到内存文件中 EDITSTREAM es; es.dwCookie = (DWORD_PTR)&memFile; es.pfnCallback = RichEditStreamOutCallback; m_pMsgEdit->GetRichEditCtrl().SetSel(0, -1); m_pMsgEdit->GetRichEditCtrl().StreamOut(SF_RTF | SFF_SELECTION, es); m_pMsgEdit->GetRichEditCtrl().Clear(); m_pMsgEdit->GetRichEditCtrl().HideSelection(FALSE, FALSE); TRACE(_T("写入内存 用时:%d ms 时间:%d\n"), clock() - clr0, clock()); clr0 = clock(); //IRichEditOle* pRichEditOleMsg = pChatFrame->m_pMsgView->GetRichEditCtrl().GetIRichEditOle(); //int count = pRichEditOleMsg->GetObjectCount(); //for(int i = 0 ; i < count ; i++) //遍历位图 //{ // REOBJECT object; //位图信息存在这里 // memset(&object,0,sizeof(REOBJECT)); // object.cbStruct = sizeof(REOBJECT); // pRichEditOleMsg->GetObject(i, &object, REO_GETOBJ_ALL_INTERFACES); // int pos = object.cp ; //位图的位置信息 // DWORD dwUSer =object.dwUser; //位图的信息,之前应用程序设置的,应有程序当然知道什么意思了 //} //IRichEditOle* pRichEditOleRecord = pChatFrame->m_pRecordView->GetRichEditCtrl().GetIRichEditOle(); if (m_pCurrentUser->state == USERINFO::USER_STATE_ONLINE) { CNetData *pChatNetData = new CNetData(); pChatNetData->MakeNETBuffer(CNetData::TCP_CHATMSG, RIMConfig::GetInstance()->m_pLogonUser, m_pCurrentUser, m_curUserIP, m_pBuf, UINT(memFile.Seek(0, CFile::current))); if (pChatNetData->GetBufferLen()) RIMConfig::GetInstance()->m_TCPSendQueue.Push(pChatNetData); else delete pChatNetData; //int memFileLen = UINT(memFile.Seek(0, CFile::current)); //LPBYTE pBufferTemp = new BYTE[memFileLen + 5]; //////////////////////////////对数据进行压缩 //if (HZIP hz = CreateZip(pBufferTemp, memFileLen + 5, "")) //{ // tstring newGuidStr = GetNewGuid() + _T(".txt"); // if (ZR_OK == ZipAdd(hz, newGuidStr.c_str(), m_pBuf, UINT(memFile.Seek(0, CFile::current)))) // { // LPBYTE pZipBuffer = NULL; // DWORD destlen = 0; // ZipGetMemory(hz, (void**)&pZipBuffer, &destlen); // if (pZipBuffer && destlen) // { // CNetData *pChatNetData = new CNetData(); // pChatNetData->MakeNETBuffer(CNetData::TCP_CHATMSG, RIMConfig::GetInstance()->m_pLogonUser, m_pCurrentUser, pZipBuffer, destlen); // RIMConfig::GetInstance()->m_TCPSendQueue.Push(pChatNetData); // } // } // if (hz != NULL) { CloseZip(hz); hz = NULL; } //} //if (pBufferTemp) // delete[] pBufferTemp; } TRACE(_T("写入数据队列 用时:%d ms 时间:%d\n"), clock() - clr0, clock()); clr0 = clock(); {//////////////// 将内存文件中的内容写到通话记录视图中 ///////////////构造字符串,包括发送的用户,及发送时间 SYSTEMTIME systemtime; GetLocalTime(&systemtime); TCHAR ch[MAX_PATH] ={ 0 }; _stprintf_s(ch, MAX_PATH, _T("%s (%d/%02d/%02d %02d:%02d:%02d):\n"), RIMConfig::GetInstance()->m_pLogonUser->UserName.c_str(), systemtime.wYear, systemtime.wMonth, systemtime.wDay, systemtime.wHour, systemtime.wMinute, systemtime.wSecond); memFile.SeekToBegin(); m_pRecordView->GetRichEditCtrl().SetReadOnly(FALSE); m_pRecordView->GetRichEditCtrl().SetSel(-2, -1); m_pRecordView->GetRichEditCtrl().SetWordCharFormat(m_sendUserCharFormat); m_pRecordView->GetRichEditCtrl().ReplaceSel(ch, FALSE); //输入用户发送时间 EDITSTREAM es; es.dwCookie = (DWORD_PTR)&memFile; es.pfnCallback = RichEditStreamInCallback; m_pRecordView->GetRichEditCtrl().SetSel(-2, -1); m_pRecordView->GetRichEditCtrl().StreamIn(SF_RTF | SFF_SELECTION, es); //为了解决添加SFF_SELECTION后,自动滚动不显示的问题 if(!(GetAsyncKeyState(VK_LBUTTON) && 0x8000)) ////鼠标没有按下 m_pRecordView->GetRichEditCtrl().PostMessage(WM_VSCROLL, MAKELONG(SB_BOTTOM, 0), 0);; m_pRecordView->GetRichEditCtrl().SetReadOnly(TRUE); } TRACE(_T("写入上面View 用时:%d ms 时间:%d\n"), clock() - clr0, clock()); clr0 = clock(); } break; case 1: { CFileDialog filedlg(TRUE, NULL, NULL, OFN_PATHMUSTEXIST | OFN_READONLY, _T("All Files (*.*)|*.*||"), this); if (IDOK == filedlg.DoModal()) { CString filePath = filedlg.GetPathName(); SendFileOrDic(filePath); } InvalidateRect(m_sendFileRc, FALSE); } break; case 2: { TCHAR szPath[MAX_PATH] ={ 0 }; //存放选择的目录路径 BROWSEINFO bi; bi.hwndOwner = m_hWnd; bi.pidlRoot = NULL; bi.pszDisplayName = szPath; bi.lpszTitle = _T("请选择需要导出的目录:"); bi.ulFlags = BIF_RETURNONLYFSDIRS; bi.lpfn = BrowseCallbackProc; //设置CALLBACK函数 bi.iImage = 0; bi.lParam = long(m_oldDic.GetBuffer()); //弹出选择目录对话框 LPITEMIDLIST lp = SHBrowseForFolder(&bi); if (lp && SHGetPathFromIDList(lp, szPath)) { m_oldDic = szPath; SendFileOrDic(szPath); } InvalidateRect(m_sendDicRc, FALSE); } break; case 3: { CString sFilter = _T("All image file|*.bmp;*.jpg;|Bitmap Files (*.bmp)|*.bmp|JPEG Files (*.jpg)|*.jpg|"); //CString sFilter = _T("All image file|*.bmp;*.jpg;*.gif|Bitmap Files (*.bmp)|*.bmp|JPEG Files (*.jpg)|*.jpg|GIF Files (*.gif)|*.gif|"); CFileDialog filedlg(TRUE, NULL, NULL, OFN_PATHMUSTEXIST | OFN_READONLY, sFilter, this); if (IDOK == filedlg.DoModal()) { CTapBitmap bmp; if (bmp.Load(filedlg.GetPathName()) == FALSE) { AfxMessageBox(_T("Could not load image.")); return TRUE; } CEnBitmap enBitmap; CBitmap Bitmap; if (enBitmap.Attach(bmp.GetBMP(), 0)) { Bitmap.DeleteObject(); Bitmap.Attach(enBitmap.Detach()); IRichEditOle *pRichEditOle; pRichEditOle = m_pMsgEdit->GetRichEditCtrl().GetIRichEditOle(); HBITMAP hBitmap = (HBITMAP)Bitmap; if (hBitmap) { ImageDataObject::InsertBitmap(pRichEditOle, hBitmap); } pRichEditOle->Release(); } } InvalidateRect(m_sendPictureRc, FALSE); } break; } return TRUE; }
BOOL CTaskbarNotifier::LoadConfiguration(LPCTSTR pszFilePath) { struct _stat st; st.st_mtime = -1; // '-1' = missing file (void)_tstat(pszFilePath, &st); if ( m_strConfigFilePath.CompareNoCase(pszFilePath) == 0 && st.st_mtime == m_tConfigFileLastModified) return TRUE; TCHAR szConfigDir[MAX_PATH]; int iTextNormalRed, iTextNormalGreen, iTextNormalBlue; int iTextSelectedRed, iTextSelectedGreen, iTextSelectedBlue; int iLeft, iTop, iRight, iBottom; int iBmpTransparentRed, iBmpTransparentGreen, iBmpTransparentBlue; int iFontSize; CString strFontType, strBmpFilePath, strBmpFileName; Hide(); m_strConfigFilePath = pszFilePath; CIni ini(pszFilePath, _T("Config")); _tcsncpy(szConfigDir, pszFilePath, _countof(szConfigDir)); szConfigDir[_countof(szConfigDir)-1] = _T('\0'); LPTSTR pszFileName = _tcsrchr(szConfigDir, _T('\\')); if (pszFileName == NULL) return FALSE; *(pszFileName + 1) = _T('\0'); iTextNormalRed = ini.GetInt(_T("TextNormalRed"), 255); iTextNormalGreen = ini.GetInt(_T("TextNormalGreen"), 255); iTextNormalBlue = ini.GetInt(_T("TextNormalBlue"), 255); iTextSelectedRed = ini.GetInt(_T("TextSelectedRed"), 255); iTextSelectedGreen = ini.GetInt(_T("TextSelectedGreen"), 255); iTextSelectedBlue = ini.GetInt(_T("TextSelectedBlue"), 255); // for backward compatibility read the old values (which had a typo) and then the new values iBmpTransparentRed = ini.GetInt(_T("BmpTrasparentRed"), 255); iBmpTransparentRed = ini.GetInt(_T("BmpTransparentRed"), iBmpTransparentRed); iBmpTransparentGreen = ini.GetInt(_T("BmpTrasparentGreen"), 0); iBmpTransparentGreen = ini.GetInt(_T("BmpTransparentGreen"), iBmpTransparentGreen); iBmpTransparentBlue = ini.GetInt(_T("BmpTrasparentBlue"), 255); iBmpTransparentBlue = ini.GetInt(_T("BmpTransparentBlue"), iBmpTransparentBlue); strFontType = ini.GetString(_T("FontType"), _T("MS Shell Dlg")); iFontSize = ini.GetInt(_T("FontSize"), 8) * 10; m_dwTimeToStay = ini.GetInt(_T("TimeToStay"), 4000); m_dwTimeToShow = ini.GetInt(_T("TimeToShow"), 500); m_dwTimeToHide = ini.GetInt(_T("TimeToHide"), 200); strBmpFileName = ini.GetString(_T("BmpFileName"), _T("")); if (!strBmpFileName.IsEmpty()) { if (PathIsRelative(strBmpFileName)) strBmpFilePath.Format(_T("%s%s"), szConfigDir, strBmpFileName); else strBmpFilePath = strBmpFileName; } // get text rectangle coordinates iLeft = ini.GetInt(_T("rcTextLeft"), 5); iTop = ini.GetInt(_T("rcTextTop"), 45); iRight = ini.GetInt(_T("rcTextRight"), 220); iBottom = ini.GetInt(_T("rcTextBottom"), 85); if (iLeft <= 0) iLeft = 1; if (iTop <= 0) iTop = 1; if (iRight <= 0) iRight = 1; if (iBottom <= 0) iBottom = 1; SetTextRect(CRect(iLeft, iTop, iRight, iBottom)); // get close button rectangle coordinates iLeft = ini.GetInt(_T("rcCloseBtnLeft"), 286); iTop = ini.GetInt(_T("rcCloseBtnTop"), 40); iRight = ini.GetInt(_T("rcCloseBtnRight"), 300); iBottom = ini.GetInt(_T("rcCloseBtnBottom"), 54); if (iLeft <= 0) iLeft = 1; if (iTop <= 0) iTop = 1; if (iRight <= 0) iRight = 1; if (iBottom <= 0) iBottom = 1; SetCloseBtnRect(CRect(iLeft, iTop, iRight, iBottom)); // get history button rectangle coordinates iLeft = ini.GetInt(_T("rcHistoryBtnLeft"), 283); iTop = ini.GetInt(_T("rcHistoryBtnTop"), 14); iRight = ini.GetInt(_T("rcHistoryBtnRight"), 299); iBottom = ini.GetInt(_T("rcHistoryBtnBottom"), 39); if (iLeft <= 0) iLeft = 1; if (iTop <= 0) iTop = 1; if (iRight <= 0) iRight = 1; if (iBottom <= 0) iBottom = 1; SetHistoryBtnRect(CRect(iLeft, iTop, iRight, iBottom)); if (strBmpFilePath.IsEmpty() || !SetBitmap(strBmpFilePath, iBmpTransparentRed, iBmpTransparentGreen, iBmpTransparentBlue)) { CEnBitmap imgTaskbar; if (imgTaskbar.LoadImage(IDR_TASKBAR, _T("GIF"))) { if (!SetBitmap(&imgTaskbar, iBmpTransparentRed, iBmpTransparentGreen, iBmpTransparentBlue)) return FALSE; } } SetTextFont(strFontType, iFontSize, TN_TEXT_NORMAL, TN_TEXT_UNDERLINE); SetTextColor(RGB(iTextNormalRed, iTextNormalGreen, iTextNormalBlue), RGB(iTextSelectedRed, iTextSelectedGreen, iTextSelectedBlue)); m_tConfigFileLastModified = st.st_mtime; return TRUE; }