星期五, 12月 21, 2007

如何合併被Outlook Express分割的信件

1.將被分割的信件內容完整複製到一個新的純文字檔,檔名依照順序命名為1.dat 2.dat .....。

2.然後新增一個批次檔,內容為

copy /b 1.dat+2.dat all.eml.

3.執行批次檔。

然後就可以看到一個新檔案all.eml。打開它,你就可以看到原來的信件內容了。

星期三, 7月 18, 2007

[MFC] Disable 關閉按鈕

有三種方法
1. 重載 CMainFrame::PreTranslateMessage 如下
缺點:按鈕還是顯示Enable
優點:可屏蔽雙擊標題列

if(pMsg->hwnd == this->m_hWnd )
{
if (pMsg->message == WM_SYSCOMMAND)
{
if (pMsg->wParam == SC_MINIMIZE)
return true;
if (pMsg->wParam == SC_CLOSE)
return true;
}
if (pMsg->message == WM_NCLBUTTONDBLCLK)
return true;
if (pMsg->message == WM_NCLBUTTONDOWN)
{
if (pMsg->wParam == HTMINBUTTON)
return true;
if (pMsg->wParam == HTSIZE)
return true;
if (pMsg->wParam == HTCLOSE)
return true;
}
}

2.加在初始化函式
(m_pMainWnd->GetSystemMenu(FALSE))->RemoveMenu(SC_CLOSE,MF_BYCOMMAND);
優點:簡單, 標題列按鈕會顯示Disable
缺點: 只能屏蔽系統選單及標題列
3.::SetClassLong(m_pMainWnd->GetSafeHwnd(),GCL_STYLE,::GetClassLong(m_pMainWnd->GetSafeHwnd(),GCL_STYLE) |CS_NOCLOSE);
優點:簡單, 標題列按鈕會顯示Disable
缺點:系統選單不會消失

星期五, 6月 15, 2007

[MFC] Image/ Color Bottons 連結整理

要讓一個程式好看又好用,有時漂亮的按鈕不可少。以下為從兩個國外有名的VC程式站抓來的相關連結。因為實在懶得再一個一個去找了。
1. Colored buttons
2. Enhanced Colored Button
3. ImageTextButton
4. Colored Buttons
5. Image Button Control
6. Transparant Image Button (BMP, GIF, JPG...)

星期二, 6月 05, 2007

[VC6] Cannot add new member

有時在Resource View中,點擊控制項要增加函式時,會出現此訊息。
1.修正此錯誤的方法為,在類別檢視器中尋找有無重複類別,如果有就移除掉。如果沒有,也移除掉。
2.刪除相對應的cpp、h檔,再重新加入。
3.打開Class Wizard,重新對應Class及cpp/h檔。
4.重新開啟Project。

星期三, 5月 30, 2007

[VC] 快捷鍵整理

Ctrl+O   :Open
Ctrl+P   :Print
Ctrl+N   :New
Ctrl+Shift+F2 :清除所有書籤
F2    :上一個書籤
Shift+F2  :上一個書籤
Alt+F2   :編輯書籤
Ctrl+F2  :添加/刪除一個書籤
F12    :Goto definition
Shift+F12  :Goto reference


星期四, 5月 24, 2007

[MFC] 抓取全螢幕 存成 BMP

//***********************************************************// 
//抓取全螢幕 存成 BMP
CDC dc;
dc.CreateDC("DISPLAY",NULL,NULL,NULL);
CBitmap bm;
int Width=GetSystemMetrics(SM_CXSCREEN);//螢幕寬
int Height=GetSystemMetrics(SM_CYSCREEN);//螢幕高
bm.CreateCompatibleBitmap(&dc,Width,Height);
CDC tdc;
tdc.CreateCompatibleDC(&dc);
CBitmap*pOld=tdc.SelectObject(&bm);
tdc.BitBlt(0,0,Width,Height,&dc,0,0,SRCCOPY);
tdc.SelectObject(pOld);
BITMAP btm;
bm.GetBitmap(&btm);
DWORD size=btm.bmWidthBytes*btm.bmHeight;
LPSTR lpData=(LPSTR)GlobalAlloc(GPTR,size);
BITMAPINFOHEADER bih;
bih.biBitCount=btm.bmBitsPixel;
bih.biClrImportant=0;
bih.biClrUsed=0;
bih.biCompression=0;
bih.biHeight=btm.bmHeight;
bih.biPlanes=1;
bih.biSize=sizeof(BITMAPINFOHEADER);
bih.biSizeImage=size;
bih.biWidth=btm.bmWidth;
bih.biXPelsPerMeter=0;
bih.biYPelsPerMeter=0;
GetDIBits(dc,bm,0,bih.biHeight,lpData,(BITMAPINFO*)&bih,DIB_RGB_COLORS);
static int filecount=0;
CString name;
name.Format("pict%04d.bmp",filecount++);
name="C:\\IDP3\\"+name;
BITMAPFILEHEADER bfh;
bfh.bfReserved1=bfh.bfReserved2=0;
bfh.bfType=((WORD)('M'<< 8)|'B');
bfh.bfSize=54+size;
bfh.bfOffBits=54;
CFile bf;
if(bf.Open(name,CFile::modeCreate|CFile::modeWrite))
{
bf.WriteHuge(&bfh,sizeof(BITMAPFILEHEADER));
bf.WriteHuge(&bih,sizeof(BITMAPINFOHEADER));
bf.WriteHuge(lpData,size);
bf.Close();
nCount++;
}
//GlobalFreePtr(lpData);
GlobalFree((HGLOBAL)lpData);
UpdateData(FALSE);