http://www.coretechnologies.com/products/MyFolders/
星期四, 12月 22, 2011
星期二, 11月 29, 2011
[軟體] 簡單好用的影音轉檔軟體 Moo0 VideoConverter 1.10
http://www.moo0.com/?top=http://www.moo0.com/software/VideoConverter/
這個軟體好用在於可以將mkv重新編碼,並且可以設定編碼後的檔案大小,而且畫質也不差。這樣就可以把一些超過一片DVD大小的720P重新壓成一片DVD的大小。 然後就可以把影片燒錄起來。
支援格式/ 編碼:
- 影片格式: AVI, FLV, M4V, MKV, MOV, MP4, MPG, OGG, OGV, RM, SWF, TP, TS, WEBM, WMV and many more.
- 影片編碼: H.263, H.264 (x264), Mpeg2, Mpeg4 (DivX, XviD and its own), RV10, Theora, VP8, WMV (v7, v8) and many more.
- 聲音格式 / 編碼: 3G2, 3GP, AAC, AC3, ADPCM, AIFF, AMR (NB, WB), AU, FLAC, GSM, M4A, MP3, MP4, OGG, PCM, RA, VORBIS, WAVE, WMA and many more.
這個軟體好用在於可以將mkv重新編碼,並且可以設定編碼後的檔案大小,而且畫質也不差。這樣就可以把一些超過一片DVD大小的720P重新壓成一片DVD的大小。 然後就可以把影片燒錄起來。
支援格式/ 編碼:
- 影片格式: AVI, FLV, M4V, MKV, MOV, MP4, MPG, OGG, OGV, RM, SWF, TP, TS, WEBM, WMV and many more.
- 影片編碼: H.263, H.264 (x264), Mpeg2, Mpeg4 (DivX, XviD and its own), RV10, Theora, VP8, WMV (v7, v8) and many more.
- 聲音格式 / 編碼: 3G2, 3GP, AAC, AC3, ADPCM, AIFF, AMR (NB, WB), AU, FLAC, GSM, M4A, MP3, MP4, OGG, PCM, RA, VORBIS, WAVE, WMA and many more.
星期一, 11月 28, 2011
[軟體] Moo0 VideoInfo 1.03 - 查看影片進階資訊
Moo0 VideoInfo 1.03 - 查看影片進階資訊:

在網路上蒐藏了許多影片,許多人可以將影片檔案容量變小,卻又可以保持高畫質,還真是好奇是怎樣的壓縮技術,自己轉檔一直測試的話可能要花上許多的時間,這時候可以試試看這個小軟體,能解析出影片中的所有細節資訊,在轉檔之前先學習別人的設定吧!
將影片檔案拖曳的軟體當中,就可以查看詳細的影片資訊,包含了檔案名稱、檔案大小、影片格式、影片長短、編碼方式、影片解析度與聲音等等的資訊,內容還頗多的,詳細的資訊我都還不太瞭解呢!而附加了複製資訊的功能,當分享影片的時候不如就輸出這樣的資訊,下載的人也能知道影片的狀態唷!
http://www.moo0.com/software/VideoInfo/
引用網址:http://portable.easylife.tw/trackback/2873
綠色軟體/影音視聽 2011/11/27 17:18 by 哇哇
在網路上蒐藏了許多影片,許多人可以將影片檔案容量變小,卻又可以保持高畫質,還真是好奇是怎樣的壓縮技術,自己轉檔一直測試的話可能要花上許多的時間,這時候可以試試看這個小軟體,能解析出影片中的所有細節資訊,在轉檔之前先學習別人的設定吧!
將影片檔案拖曳的軟體當中,就可以查看詳細的影片資訊,包含了檔案名稱、檔案大小、影片格式、影片長短、編碼方式、影片解析度與聲音等等的資訊,內容還頗多的,詳細的資訊我都還不太瞭解呢!而附加了複製資訊的功能,當分享影片的時候不如就輸出這樣的資訊,下載的人也能知道影片的狀態唷!
http://www.moo0.com/software/VideoInfo/
星期日, 11月 27, 2011
[MFC] 繪圖時去除閃爍
1. 專案加入 memdc.h
from Here
2. 在 stdafx.h加入下一行
#include "memdc.h"
3. 修改訊息 WM_ERASEBKGND的回應 如下:
BOOL CExampleView::OnEraseBkgnd(CDC* pDC) { return FALSE; }
4.修改OnDrae的程式碼,如下
void CExampleView::OnDraw(CDC* dc) { CMemDC pDC(dc); CExampleDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here - use pDC //as the device context to draw to }
星期四, 11月 10, 2011
星期一, 7月 04, 2011
[VS2010] VC常用快速鍵
Ctrl+] 在括號間移動(游標須在括號旁邊) Ctrl+'-' 移到游標先前所在位置 Ctrl+Shift+'-' 與上面相反 Ctrl+Shift+F 舊式的尋找工具 Ctrl+Tab 循環已開啟視窗 Ctrl+F3 尋找目前所選的文字 Ctrl+L 刪除目前行 Ctrl+W 選取文字(或一段空白) Ctrl+Up 立刻捲動視窗,不需移動游標 Ctrl+Down 立刻捲動視窗,不需移動游標
Ctrl+K,Ctrl+K 設定/取消 書籤 Ctrl+K,Ctrl+P 前往上一個書籤 Ctrl+K,Ctrl+N 前往下一個書籤
Ctrl+K,Ctrl+C 註解選擇文字或當前行 Ctrl+K,Ctrl+U 消去註解
Ctrl+K,Ctrl+F 格式化選取文字 Alt+F8 格式化選取文字
Ctrl+M,Ctrl+M 打開/關閉 程式區塊 Ctrl+M,Ctrl+O 關閉所有程式區塊
F12 移到變數或函式定義處 Shitf+F12 尋找變數的reference
Shift+Alt+Enter 全螢幕 Ctrl+Shift+V 開啟循環剪貼簿
Ctrl+Shift+R 錄製巨集 Ctrl+Shift+P 播放巨集
Alt+Shift+箭頭 以區塊選擇 Ctrl+Enter 上面增加空白行 Ctrl+Sfift+Enter 下面增加空白行
Ctrl+Shift+Comma(,) 字體縮小 (逗號加上Shift即是小於(<)符號) Ctrl+Shift+Period(.) 字體放大 (句號加上Shift即是大於(>)符號)
星期五, 4月 08, 2011
[知識] Non-deterministic Algorithm
Def: 這類演算法在做任何事時,該演算法的下一步可能會有無限多件事可以選擇。 (Permitting more than one choice of next move at some step in a computation) 1.演算法中每一個步驟的運算無法被唯一定義。 2.能夠執行非決定性演算法的機器,稱為非決定性的機器 (Non-deterministic Machine)。 2-1 由於非決定性演算法在執行時,每一步可能有無限多件事要處理,故非決定性計算機器需假設有無限多個處理器可平行處理。因此,非決定性計算機器的計算能力比決定性計算機器要強大。 2-2 但是,實際上並不存在此種機器。 Non-deterministic Algorithm的執行步驟分成兩個階段: 1.猜測階段(Guess) 由於沒有一個既定的程序來從事此階段的猜測工作,因此本階段是Non-deterministic 對於本階段,我們只知道一件事: 1-1 如果一個問題有正確解的話,此階段一定可以將這個正確解給猜出來;反之,若該問題沒有正確解的話,則此階段就會隨便給解答。 1-2 至於猜測階段是怎麼將這個解答給找出來的,我們無從得知(不論所給的解是否為正確解) 。 2.驗証階段(Verification) 將上一階段所猜出來的結果加以驗証是否為真 (True)
星期日, 4月 03, 2011
[旅遊] 319新竹一日蓋章行心得
1. 導航有時還是必要的。雖然地圖上路名大多有標示,不過在寶山的時候,路名跟地圖標示的不一樣,所以多走了一些冤枉路。而且有時候太小的路名也不會標示,遊憩是在山區時候。或是說比例尺太大,地圖沒有標示所有的部分,或是太小而沒有標示小路名,例如在湖口的部分。所以紙本地圖還是有缺點。而且雖然在市區都有標記的很清楚不過,地圖的印刷太雜亂有時候不容易找到路名,像是在新竹市區的時候。
2.在新竹市區看到很多鴿子跟SNG車,回來才發現是因為邱毅所發起的反霸凌示威遊行。
3.在台3線的時候,一路上好多重型機車,其中也有女騎士,不過是少數。在第一間小七,對面是一間萊爾富,停的都是重型機車,這邊小七只有自行車,可能是因為對面停車空間比較大的關係吧。
4.內灣不會很遠,下次可以去看看。
5.原來新湖口指的是湖口車站或是市中心的意思。
6.在新豐鄉蓋章的時候遇到一個怪人,雖然看起來不骯髒,不果衣服都破了,感覺就像是無業遊民。他看到我在蓋章,就過來想要分享心得,雖然我是沒看到他的印章簿,不過感覺他好像真的有在收集的樣子,連台鐵的100章都知道。不知道他怎麼收集的,看起來就不像是有錢的樣子。有些字也不太會寫的感覺,有時候一直重複剛剛講的話。感覺就是一個怪怪的人。
7.除了重機外,一路也發現許多自行車騎士,腿都好壯,我想除非我友好自行車,否則要我這樣騎,我應該騎不遠,雖然我很喜歡騎車到處跑的感覺。可是要我單靠腳力,感覺還是太累了。
8.這次除了319章以外,其他的紀念章蓋的不多,雖然到了竹東的旅遊服務中心,不過那裏一個紀念章也沒有。只有在北埔的文化紀念館蓋了一些以前的古蹟章。因為這個館感覺就很無聊,那裏的工作人員也閒到不知道是在玩遊戲還是只是聽音樂,反正就感覺很爽的樣子,雖然說假日還要上班。
9.湖口往新埔因為沒有直接的道路,可能是因為新埔柿在山中間的平地的關係,所以需要越過山,偏偏道路標示的又不清楚。害我走錯路,雖然是最後還是到了,不過要是沒有手錶上的指南針,我看我八成會走很多冤枉路。不過令人意外的是,雖然新埔的外圍區都是山,大部分都是種茶葉的,不過在市中心感覺還挺熱鬧的,有許多連鎖的商店,那裏的中學生打扮也挺潮流的,有點令人意外。我一開始也很懷疑,這麼山區且有沒有多少觀光資源的地方真的會有小七嗎,沒想到真的有,還有兩間。也幸好有,不然我真的會很失望。不知道為什麼這個地方會有這麼多消費族群可以撐得起這麼多店家。總而言之,新埔跟湖口不應該放在一起蓋,因為這兩個鄉鎮沒有直接連市中心的幹道,應該把新埔鎮放第一位,湖口放最後才對。真是失策,不過因為一開始來不及規畫路線就直接走,所以會發生這樣的情況也是不意外。
蓋章路線
關西 -> 橫山 -> 竹東 -> 北埔 -> 寶山 -> 東區 -> 香山區 -> 北區 -> 竹北 -> 新豐 -> 湖口 -> 新埔
尖石、五峰、峨嵋因為沒有小七而且找店家有點麻煩,所以等下次非假日直接到市公所蓋章好了。
2.在新竹市區看到很多鴿子跟SNG車,回來才發現是因為邱毅所發起的反霸凌示威遊行。
3.在台3線的時候,一路上好多重型機車,其中也有女騎士,不過是少數。在第一間小七,對面是一間萊爾富,停的都是重型機車,這邊小七只有自行車,可能是因為對面停車空間比較大的關係吧。
4.內灣不會很遠,下次可以去看看。
5.原來新湖口指的是湖口車站或是市中心的意思。
6.在新豐鄉蓋章的時候遇到一個怪人,雖然看起來不骯髒,不果衣服都破了,感覺就像是無業遊民。他看到我在蓋章,就過來想要分享心得,雖然我是沒看到他的印章簿,不過感覺他好像真的有在收集的樣子,連台鐵的100章都知道。不知道他怎麼收集的,看起來就不像是有錢的樣子。有些字也不太會寫的感覺,有時候一直重複剛剛講的話。感覺就是一個怪怪的人。
7.除了重機外,一路也發現許多自行車騎士,腿都好壯,我想除非我友好自行車,否則要我這樣騎,我應該騎不遠,雖然我很喜歡騎車到處跑的感覺。可是要我單靠腳力,感覺還是太累了。
8.這次除了319章以外,其他的紀念章蓋的不多,雖然到了竹東的旅遊服務中心,不過那裏一個紀念章也沒有。只有在北埔的文化紀念館蓋了一些以前的古蹟章。因為這個館感覺就很無聊,那裏的工作人員也閒到不知道是在玩遊戲還是只是聽音樂,反正就感覺很爽的樣子,雖然說假日還要上班。
9.湖口往新埔因為沒有直接的道路,可能是因為新埔柿在山中間的平地的關係,所以需要越過山,偏偏道路標示的又不清楚。害我走錯路,雖然是最後還是到了,不過要是沒有手錶上的指南針,我看我八成會走很多冤枉路。不過令人意外的是,雖然新埔的外圍區都是山,大部分都是種茶葉的,不過在市中心感覺還挺熱鬧的,有許多連鎖的商店,那裏的中學生打扮也挺潮流的,有點令人意外。我一開始也很懷疑,這麼山區且有沒有多少觀光資源的地方真的會有小七嗎,沒想到真的有,還有兩間。也幸好有,不然我真的會很失望。不知道為什麼這個地方會有這麼多消費族群可以撐得起這麼多店家。總而言之,新埔跟湖口不應該放在一起蓋,因為這兩個鄉鎮沒有直接連市中心的幹道,應該把新埔鎮放第一位,湖口放最後才對。真是失策,不過因為一開始來不及規畫路線就直接走,所以會發生這樣的情況也是不意外。
蓋章路線
關西 -> 橫山 -> 竹東 -> 北埔 -> 寶山 -> 東區 -> 香山區 -> 北區 -> 竹北 -> 新豐 -> 湖口 -> 新埔
尖石、五峰、峨嵋因為沒有小七而且找店家有點麻煩,所以等下次非假日直接到市公所蓋章好了。
星期四, 3月 24, 2011
[知識] SIFT
SIFT算法的教程、原始碼及應用軟件
1、ubc:DAVID LOWE---SIFT算法的創始人,兩篇經典的文章
http://www.cs.ubc.ca/~lowe/
2、cmu:YanKe---PCASIFT,總結的SIFT方面的文章SO全,超經典
http://www.andrew.cmu.edu/user/yke/
3、ubc:MBROWN---SIFT算法用於圖像拼接的經典應用autopano-sift,包括一個SIFTLIB庫
http://www.cs.ubc.ca/~mbrown/autostitch/autostitch.html
http://www.cs.ubc.ca/~mbrown/panorama/panorama.html
4、toronto:Jepson---Matlab SIFT tutorial, 超級超級超級經典~
http://www.cs.toronto.edu/~jepson
5、ucla:Vedaldi---加州大學一個博士生編的SIFT,Matlab、C的都有,但沒用過
http://www.cs.ucla.edu/~vedaldi/
6、一個小的拼接軟體ptasmblr
http://www.tawbaware.com/ptasmblr.htm
轉自 http://summerstation.spaces.live.com/blog/cns!e39c001cb6e4b188!1501.entry
1、ubc:DAVID LOWE---SIFT算法的創始人,兩篇經典的文章
http://www.cs.ubc.ca/~lowe/
2、cmu:YanKe---PCASIFT,總結的SIFT方面的文章SO全,超經典
http://www.andrew.cmu.edu/user/yke/
3、ubc:MBROWN---SIFT算法用於圖像拼接的經典應用autopano-sift,包括一個SIFTLIB庫
http://www.cs.ubc.ca/~mbrown/autostitch/autostitch.html
http://www.cs.ubc.ca/~mbrown/panorama/panorama.html
4、toronto:Jepson---Matlab SIFT tutorial, 超級超級超級經典~
http://www.cs.toronto.edu/~jepson
5、ucla:Vedaldi---加州大學一個博士生編的SIFT,Matlab、C的都有,但沒用過
http://www.cs.ucla.edu/~vedaldi/
6、一個小的拼接軟體ptasmblr
http://www.tawbaware.com/ptasmblr.htm
轉自 http://summerstation.spaces.live.com/blog/cns!e39c001cb6e4b188!1501.entry
星期二, 12月 14, 2010
[MFC] CImage 直接存取記憶體
//for 8-bit 影像
byte* pRealData=(byte*)m_Image.GetBits(); //取得記憶體開頭
int pit=m_Image.GetPitch(); //每一行的記憶體寬度
for (int y=0; y< Height;y++){
for (int x=0; x< Width;x++){
pRealData[ pit*y + x] = Intensity;
}}
//for 24-bit 影像
byte* pRealData=(byte*)SaveImg.GetBits();
int pit=SaveImg.GetPitch();
int bitCount=3;
for (int y=0; y< height; y++) {
for (int x=0; x< width; x++) {
pRealData [ pit*y + x*bitCount] = R ;
pRealData [ pit*y + x*bitCount+1] = G ;
pRealData [ pit*y + x*bitCount+2] = B;
}}
byte* pRealData=(byte*)m_Image.GetBits(); //取得記憶體開頭
int pit=m_Image.GetPitch(); //每一行的記憶體寬度
for (int y=0; y< Height;y++){
for (int x=0; x< Width;x++){
pRealData[ pit*y + x] = Intensity;
}}
//for 24-bit 影像
byte* pRealData=(byte*)SaveImg.GetBits();
int pit=SaveImg.GetPitch();
int bitCount=3;
for (int y=0; y< height; y++) {
for (int x=0; x< width; x++) {
pRealData [ pit*y + x*bitCount] = R ;
pRealData [ pit*y + x*bitCount+1] = G ;
pRealData [ pit*y + x*bitCount+2] = B;
}}
星期一, 11月 29, 2010
[MFC] Multithread
//Thread function 內容
UINT MyThreadFun(LPVOID LParam)
{
MyThreadInfo *pInfo1=(MyThreadInfo*) LParam;
CTESTDlg *hWnd=(CTESTDlg*)CWnd::FromHandle(pInfo1->Wnd);
CSliderCtrl *slider=(CSliderCtrl*)hWnd->GetDlgItem(IDC_SLIDER1);
slider->SetLineSize(100); // 設定 slider 大小
for(int i=0;i<100;i++){
slider->SetPos(i); // 移動 slider
Sleep(100); // 暫停 thread
}
return(0);
}
//Dialog按鈕程式碼
//開始 Tread
struct MyThreadInfo{
HWND hWnd; // 紀錄產生 thread 的視窗物件
}Info1;
void CTESTDlg::OnBnClickedOk()
{
Info1.hWnd=this->m_hWnd; // 紀錄 Dialog 的window handle
AfxBeginThread(MyThreadFun, (LPVOID)&Info1);
}
UINT MyThreadFun(LPVOID LParam)
{
MyThreadInfo *pInfo1=(MyThreadInfo*) LParam;
CTESTDlg *hWnd=(CTESTDlg*)CWnd::FromHandle(pInfo1->Wnd);
CSliderCtrl *slider=(CSliderCtrl*)hWnd->GetDlgItem(IDC_SLIDER1);
slider->SetLineSize(100); // 設定 slider 大小
for(int i=0;i<100;i++){
slider->SetPos(i); // 移動 slider
Sleep(100); // 暫停 thread
}
return(0);
}
//如果希望 thread function 能放在 class 中, 請宣告它為 static
class CTESTDlg : public CDialog {
static UINT MyThreadFun(LPVOID LParam);
};
///////////////////////////////////////////////////////////////
//Dialog按鈕程式碼
//開始 Tread
struct MyThreadInfo{
HWND hWnd; // 紀錄產生 thread 的視窗物件
}Info1;
void CTESTDlg::OnBnClickedOk()
{
Info1.hWnd=this->m_hWnd; // 紀錄 Dialog 的window handle
AfxBeginThread(MyThreadFun, (LPVOID)&Info1);
}
星期二, 11月 16, 2010
[MFC] Unicode環境下使用CStdioFile來存取中文檔案
因為CStdioFile並不支援Unicode所以無法存取Uncode檔案,而當存取ANSI檔案時又因為Unicode環境下而造成無法使用CStdioFile::ReadString()所讀到的CString。所以加入下面一行程式碼來設定讀入的檔案的地區編碼。
Windows环境下Unicode编程总结和将ANSI转换到Unicode 将Unicode转换到ANSI
setlocale( LC_CTYPE,"cht" );
如果是簡體中文則將cht改為chs。
其他參考文章:解决UNICODE字符集下CStdioFile的Writestring无法写入中文的问题
Windows环境下Unicode编程总结和将ANSI转换到Unicode 将Unicode转换到ANSI
[MFC] CImage的簡單複製方法 (Copy CImage)
BOOL ImageCopy(const CImage &srcImage, CImage &destImage) { int i,j;//循環變量 if(srcImage.IsNull()) return FALSE; //原始影像參數 BYTE* srcPtr=(BYTE*)srcImage.GetBits(); int srcBitsCount=srcImage.GetBPP(); int srcWidth=srcImage.GetWidth(); int srcHeight=srcImage.GetHeight(); int srcPitch=srcImage.GetPitch(); //銷毀原有圖像 if( !destImage.IsNull()) { destImage.Destroy(); } //創建新圖像 if(srcBitsCount==32) //支援alpha通道 { destImage.Create(srcWidth,srcHeight,srcBitsCount,1); } else { destImage.Create(srcWidth,srcHeight,srcBitsCount,0); } //加載調色板 if(srcBitsCount<=8&&srcImage.IsIndexed())//需要調色盤 { RGBQUAD pal[256]; int nColors=srcImage.GetMaxColorTableEntries(); if(nColors>0) { srcImage.GetColorTable(0,nColors,pal); destImage.SetColorTable(0,nColors,pal);//複製調色盤 } } //目標影像參數 BYTE *destPtr=(BYTE*)destImage.GetBits(); int destPitch=destImage.GetPitch(); //複製影像數據 for(i=0 ; i<srcHeight;i++) { memcpy( destPtr+i*destPitch, srcPtr+i*srcPitch, abs(srcPitch) ); } return TRUE; }
星期一, 10月 25, 2010
[攝影] 利用Photoshop做數位黑卡
前置作業:
1. 在Photoshop中同時開啟亮片與暗片。
2. 點選暗片後按Ctrl+A(全選),再按Ctrl+C(拷貝),之後就可以關閉暗片的檔案,你已經用不到暗片了。
3. 點選亮片後按Ctrl+V(貼上),前置作業完成。
繼續:
1. 在LAYER對話框(PALLETE)中先點選第一層也就是暗片的部分,然後點選對話盒最下方,由左邊數來第二個圖示(Add Vector Mask),這時在第一層會出現一個白色的矩形。
2. 在LAYER對話盒點選第二層也就是BACKGROUND的部分,按Ctrl+A(全選),再按Ctrl+C(拷貝)。
3. 按住ALT同時點選在第一步驟時出現的白色長方形,這時畫面會變成白色,再按Ctrl+V(貼上),你會看到黑白影像。
4. 到 Filter / Blur / Gaussian Blur ,把 Radius 設為 40 pixels。
5. 到LAYER對話盒點選BACKGROUND,你就可以看到合成完成的影像。
6. 到 Image/ Adjustment / Shadow/Highlight 將SHADOW值設為24,或其他你認為適當的數值。
7. 回到LAYER對話盒,按上方最右邊的箭頭,將會出現選單,選擇Flaten Image就大功告成了。
引用來源 中文 英文
1. 在Photoshop中同時開啟亮片與暗片。
2. 點選暗片後按Ctrl+A(全選),再按Ctrl+C(拷貝),之後就可以關閉暗片的檔案,你已經用不到暗片了。
3. 點選亮片後按Ctrl+V(貼上),前置作業完成。
繼續:
1. 在LAYER對話框(PALLETE)中先點選第一層也就是暗片的部分,然後點選對話盒最下方,由左邊數來第二個圖示(Add Vector Mask),這時在第一層會出現一個白色的矩形。
2. 在LAYER對話盒點選第二層也就是BACKGROUND的部分,按Ctrl+A(全選),再按Ctrl+C(拷貝)。
3. 按住ALT同時點選在第一步驟時出現的白色長方形,這時畫面會變成白色,再按Ctrl+V(貼上),你會看到黑白影像。
4. 到 Filter / Blur / Gaussian Blur ,把 Radius 設為 40 pixels。
5. 到LAYER對話盒點選BACKGROUND,你就可以看到合成完成的影像。
6. 到 Image/ Adjustment / Shadow/Highlight 將SHADOW值設為24,或其他你認為適當的數值。
7. 回到LAYER對話盒,按上方最右邊的箭頭,將會出現選單,選擇Flaten Image就大功告成了。
引用來源 中文 英文
星期六, 5月 22, 2010
星期四, 4月 01, 2010
[旅遊] 2010-04-01 平溪一日遊
星期日, 1月 04, 2009
[MFC] CSrollView的 ScrollBar
1 OnInitialUpdate()函式裡的sizeTotal.cx=sizeTotal.cy 值要設定
2. CSize sizeTotal(Getx(),Gety());
SetScrollSizes(MM_TEXT, sizeTotal);
2. CSize sizeTotal(Getx(),Gety());
SetScrollSizes(MM_TEXT, sizeTotal);
[VS2005] 怎樣添加事件、映射消息和重載函數
VS2005 的 MFC 添加事件、映射消息和重載函數的操作 和 VS6.0 不一樣,是在類別的屬性頁裡。操作如下:
在「類別檢視」中,右鍵單擊想要操作的類別,點擊「屬性」。在打開的屬性頁中,最上一排按鈕中的「事件」、「訊息」和「覆寫」分別對應「添加事件」、「映射消息」和「重載函數」的操作。
在「類別檢視」中,右鍵單擊想要操作的類別,點擊「屬性」。在打開的屬性頁中,最上一排按鈕中的「事件」、「訊息」和「覆寫」分別對應「添加事件」、「映射消息」和「重載函數」的操作。
星期六, 1月 03, 2009
[MFC] 全螢幕功能-開始工作列未消失
原因是OnGetMinMaxInfo這個函式沒有被OverRide,
,最好是用ClassWizard,不要用手動。因為很可能會沒有效果。
要重寫此函式的原因如下:
程序中有一個地方要說明一下,那就是OnGetMinMaxInfo函數的作用。你可以試一下,如果把這個函數去掉,則當你按下工具欄中的全屏顯示按鈕時,框架視圖確實變大了,但沒有想像的那樣實現全屏顯示,底邊留下一個狀態欄——一個有些發育不良的全屏顯示窗口。為什麼會這樣呢?經過調試後,發現問題出在WM_GETMINMAXINFO消息的處理上。在Windows中,無論什麼時候以何種方式改變窗口的尺寸或大小,是拖拽窗口邊緣也好,或是在代碼中調用改變窗口尺寸的函數也好,總之不管你用什麼方法,Windows都會首先發送WM_GETMINMAXINFO消息。這個消息的意思是說:「嘿,如果你要強迫我的尺寸變大或變小,就附上詳細的MINMAXINFO結構信息,否則我用默認值處理。」大多數應用程序都不用顯式處理這個 WM_GETMINMAXINFO消息(也就是說讓DefWindowProc窗口過程進行缺省處理),而Windows在進行缺省處理時是不會讓一個窗口視圖比屏幕還大的,所以我們會碰上前面講的那個問題。解決的方法是:不要讓Windows對WM_GETMINMAXINFO消息進行缺省處理,而是由我們自己處理,方法如下:
,最好是用ClassWizard,不要用手動。因為很可能會沒有效果。
要重寫此函式的原因如下:
程序中有一個地方要說明一下,那就是OnGetMinMaxInfo函數的作用。你可以試一下,如果把這個函數去掉,則當你按下工具欄中的全屏顯示按鈕時,框架視圖確實變大了,但沒有想像的那樣實現全屏顯示,底邊留下一個狀態欄——一個有些發育不良的全屏顯示窗口。為什麼會這樣呢?經過調試後,發現問題出在WM_GETMINMAXINFO消息的處理上。在Windows中,無論什麼時候以何種方式改變窗口的尺寸或大小,是拖拽窗口邊緣也好,或是在代碼中調用改變窗口尺寸的函數也好,總之不管你用什麼方法,Windows都會首先發送WM_GETMINMAXINFO消息。這個消息的意思是說:「嘿,如果你要強迫我的尺寸變大或變小,就附上詳細的MINMAXINFO結構信息,否則我用默認值處理。」大多數應用程序都不用顯式處理這個 WM_GETMINMAXINFO消息(也就是說讓DefWindowProc窗口過程進行缺省處理),而Windows在進行缺省處理時是不會讓一個窗口視圖比屏幕還大的,所以我們會碰上前面講的那個問題。解決的方法是:不要讓Windows對WM_GETMINMAXINFO消息進行缺省處理,而是由我們自己處理,方法如下:
void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) { if (m_bFullScreen) { lpMMI->ptMaxSize.y = m_FullScreenWindowRect.Height(); lpMMI->ptMaxTrackSize.y = lpMMI->ptMaxSize.y; lpMMI->ptMaxSize.x = m_FullScreenWindowRect.Width(); lpMMI->ptMaxTrackSize.x = lpMMI->ptMaxSize.x; } //CFrameWnd::OnGetMinMaxInfo(lpMMI); }
訂閱:
文章 (Atom)