If you want the app to change it's layout when window is maximal, you must use sizers. There are many sizers in wxWidgets, such as wxBoxSizer, wxGridSizer and wxFlexGridSizer.
When I have two vertical parts in window and I want the bottom part is fixed size, I can use wxBoxSizer and put two panels on wxBoxSizer. Here is settings about these components.
wxBoxSizer:
Orientation is wxVertical.
wxPanel1(top):
wxALIGN_TOP is true.
wxEXPAND is true.
Stretch Factor is 1.
wxPanel2(bottom):
wxALIGN_BOTTOM is true.
wxEXPAND is true.
If you set Stretch Factor, the part will be adjusted size when window is maximal.
pretty code
2014年10月26日 星期日
2014年10月19日 星期日
大法官觀後感
昨天去看了電影-大法官
覺得這部電影有很多點可以在看完後好好想想
But 人生總是會有 But ...
看完電影準備去運動時
開車由建國高架往南
剛從南京上閘道後就被後面一台小車撞到
我前面因為有車要下建國
當時我的車已踩煞車
幾乎是快停止的狀態
居然也能被撞到
不知道駕駛當時在想什麼
不過最白吃的還是我本人
當時看一下以為只撞到保險桿
就叫他開車要小心點
換來一句謝謝後就離開
開到公園後
下車仔細看看
才發現左輪上方板金受損
輪圈受損
保險桿也受損
害我一整個心情不好
幸好熟悉的輪胎行晚上有營業
晚上花了 7000 換掉 4 個輪圈
輪胎因為沒事故不用換掉
不然至少還要換掉 2 個才能平衡
再加上板金
我想這次被撞沒花個一萬塊跑不掉
那位大哥
遇到我是你運氣好
請你下次好好小心開車
車上還載著家人
為什麼不更小心點
可憐我的小白
覺得這部電影有很多點可以在看完後好好想想
But 人生總是會有 But ...
看完電影準備去運動時
開車由建國高架往南
剛從南京上閘道後就被後面一台小車撞到
我前面因為有車要下建國
當時我的車已踩煞車
幾乎是快停止的狀態
居然也能被撞到
不知道駕駛當時在想什麼
不過最白吃的還是我本人
當時看一下以為只撞到保險桿
就叫他開車要小心點
換來一句謝謝後就離開
開到公園後
下車仔細看看
才發現左輪上方板金受損
輪圈受損
保險桿也受損
害我一整個心情不好
幸好熟悉的輪胎行晚上有營業
晚上花了 7000 換掉 4 個輪圈
輪胎因為沒事故不用換掉
不然至少還要換掉 2 個才能平衡
再加上板金
我想這次被撞沒花個一萬塊跑不掉
那位大哥
遇到我是你運氣好
請你下次好好小心開車
車上還載著家人
為什麼不更小心點
可憐我的小白
2014年10月18日 星期六
How to catch windows message in wxWidgets
1. Add define in your header file.
WXLRESULT MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam);
2. Add implement in your cpp file.
WXLRESULT XXX::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam)
{
switch(message)
{
case WM_KEY:
break;
default:
break;
}
return ZZZ::MSWWindowProc(message, wParam, lParam);
}
XXX is your class name and ZZZ is the base class that you derive.
3. You can catch the windows message what you want now.
WXLRESULT MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam);
2. Add implement in your cpp file.
WXLRESULT XXX::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam)
{
switch(message)
{
case WM_KEY:
break;
default:
break;
}
return ZZZ::MSWWindowProc(message, wParam, lParam);
}
XXX is your class name and ZZZ is the base class that you derive.
3. You can catch the windows message what you want now.
2014年10月10日 星期五
Update wxWidgets' libs in wxDev-C++
Because the wxWidgets's version is 2.9.3 in wxDev-C++, I want to use the new version, this is the steps how to do:
My wxDev-C++'s installing path is "C:\wxDev-Cpp".
1. Download the wxWidget's source and unzip to C:\wxWidgets.
2. Open cmd window and type "set path=C:\wxDev-Cpp\MinGW32\bin". Then "cd wxWidgets\build\msw".
3. Type "mingw32-make -f makefile.gcc UNICODE=1 SHARED=0 BUILD=release MONOLITHIC=1".
4. After compiling it, copy "C:\wxWidgets\lib\gcc_lib\*.a" to C:\wxDev-Cpp\lib\wx\gcc_lib".
5. Replace "C:\wxDev-Cpp\include\common" from "C:\wxWidgets\include".
6. Copy "C:\wxWidgets\lib\gcc_lib\mswu\wx\setup.h" to "C:\wxDev-Cpp\include\common\wx".
7. Change wxWidgets's version in wxDev-C++ -> Tools -> Compiler Options -> Version info.
8. Before you compile old project, remember to del all *.o in "project\Objects\MingW".
9. Enjoy it.
My wxDev-C++'s installing path is "C:\wxDev-Cpp".
1. Download the wxWidget's source and unzip to C:\wxWidgets.
2. Open cmd window and type "set path=C:\wxDev-Cpp\MinGW32\bin". Then "cd wxWidgets\build\msw".
3. Type "mingw32-make -f makefile.gcc UNICODE=1 SHARED=0 BUILD=release MONOLITHIC=1".
4. After compiling it, copy "C:\wxWidgets\lib\gcc_lib\*.a" to C:\wxDev-Cpp\lib\wx\gcc_lib".
5. Replace "C:\wxDev-Cpp\include\common" from "C:\wxWidgets\include".
6. Copy "C:\wxWidgets\lib\gcc_lib\mswu\wx\setup.h" to "C:\wxDev-Cpp\include\common\wx".
7. Change wxWidgets's version in wxDev-C++ -> Tools -> Compiler Options -> Version info.
8. Before you compile old project, remember to del all *.o in "project\Objects\MingW".
9. Enjoy it.
2014年8月15日 星期五
Ubuntu 啟動相關檔案
/etc/init.d/xxxxx
啟動 script 放置處
/etc/rcx.d/
啟動 level 對應的服務 script, 由系統產生
為了避免影響其他服務
開機想要自動執行的
可以寫在 /etc/rc.local
啟動 script 放置處
/etc/rcx.d/
啟動 level 對應的服務 script, 由系統產生
為了避免影響其他服務
開機想要自動執行的
可以寫在 /etc/rc.local
2014年7月16日 星期三
2014年7月5日 星期六
自然人憑證解鎖 6981 錯誤
不管是使用 HiCOS 或是 MOICA 網站上的解鎖功能
如果出現 6981 的錯誤代碼
請先檢查是否使用有鍵盤的讀卡機
據客服說法是因為解鎖時程序被有鍵盤的讀卡機擋下所致
此問題只能找讀卡機廠商解決
感覺這個問題不太好解
廠商回了一次電話後就沒有下文
最快的解決之道就是找人借一個普通的讀卡機
終於我又有自然人憑證可用了
另外如果像我是使用 Win8 64 的人
如果有遇到安裝讀卡機驅動失敗的情形
請先記得將讀卡機拔掉
安裝程序便能順利安裝成功
2014年7月4日 星期五
2014年6月29日 星期日
2014年6月26日 星期四
查詢 MySQL table 空間 語法
SELECT table_name, table_rows,
IF(Index_length=0, Data_length, Data_length*Index_length) AS 'Table Size'
FROM information_schema.tables
WHERE table_schema='mk'
ORDER BY 'Table Size', table_rows DESC;
1. mk 是資料庫名
2. IF是判斷式,如果Index_length是0
IF(Index_length=0, Data_length, Data_length*Index_length) AS 'Table Size'
FROM information_schema.tables
WHERE table_schema='mk'
ORDER BY 'Table Size', table_rows DESC;
1. mk 是資料庫名
2. IF是判斷式,如果Index_length是0
MySQL 自創欄位
也是之前面試回家才想到犯的錯誤
SELECT DNAME, '1st table' AS 'Table名' FROM DEPARTMENT
UNION
SELECT DNAME, '2nd table' AS 'Table名' FROM DEPARTMENT;
同一張表都多出來一個欄位,但欄位名稱不一樣
因為是字串,故記得加單引號
SELECT DNAME, '1st table' AS 'Table名' FROM DEPARTMENT
UNION
SELECT DNAME, '2nd table' AS 'Table名' FROM DEPARTMENT;
同一張表都多出來一個欄位,但欄位名稱不一樣
因為是字串,故記得加單引號
MySQL ROWNUMBER
之前面試答不出來的問題
今天突然想到解法
SET @rownum:=0;
SELECT LNAME, BDATE, (@rownum:=@rownum+1) AS '名次'
FROM EMPLOYEE
ORDER BY BDATE;
重點在 @rownum:=@rownum+1
會讓 @rownum 一直累加
如果沒有 SET @rownum:=0;
重複執行 SELECT 敘述 @rownum 會延續上一次 SELECT 後的值
今天突然想到解法
SET @rownum:=0;
SELECT LNAME, BDATE, (@rownum:=@rownum+1) AS '名次'
FROM EMPLOYEE
ORDER BY BDATE;
重點在 @rownum:=@rownum+1
會讓 @rownum 一直累加
如果沒有 SET @rownum:=0;
重複執行 SELECT 敘述 @rownum 會延續上一次 SELECT 後的值
2014年6月19日 星期四
2014年6月18日 星期三
2014年6月17日 星期二
2014年6月16日 星期一
Garmin Vivofit Bug Fix
感覺要解決睡眠時間沒有上傳的問題
不過坦白說我也懶得試了
就讓他當個稱職的計步器吧
後來上網查了一下
國外的討論區有提到是因為 2.6 版本的關係
但台灣的討論區都沒有看到
看起來台灣沒什麼人拿來偵測睡眠狀態吧
後來上網查了一下
國外的討論區有提到是因為 2.6 版本的關係
但台灣的討論區都沒有看到
看起來台灣沒什麼人拿來偵測睡眠狀態吧
2014年6月12日 星期四
刪除 Win8 的服務
之前安裝 MySQL 因為版本不一致無法順利安裝
以前都是直接進 registry 去刪除
有一個錯誤的訊息掛在服務裡看著也是礙眼
找了一下
也因為安裝不成功導致電腦管理的服務裡還殘存 MySQL
以前都是直接進 registry 去刪除
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\
但這招在 Win8 卻無法成功
有一個錯誤的訊息掛在服務裡看著也是礙眼
找了一下
只要直接下命令
sc delete [service name]
就可以順利的移除服務
2014年6月10日 星期二
機器週期
以下內容出自 教育部數位教學資源入口網
http://content.edu.tw/senior/computer/ks_ks/et/cpu/index.htm
我們從鍵盤鍵入一個命令、資料或用滑鼠從畫面中選取某個選項之後,電腦系統為了執行此一命令或處理資料時,會先翻成電腦內部看得懂的機械語言指令(Machine Language Instruction)。而處理每一個機械語言指令時,資料會傳送或來自記憶體或輸入/輸出單元。如此每一次的傳送或接收的動作稱為機器週期(Machine Cycle)。機器週期又可分為兩部份:指令週期(Instruction cycle,I-cycle)與執行週期(Execution cycle,E-cycle)。 在指令週期中,控制單元會從記憶單元取出下一待執行的指令。在執行週期(E-cycle)內所執行的工作包含:找出資料、執行指令,以及將結果存到累加器內。
指令週期
控制單元從主記憶體中提取下一個所要執行的指令。
控制單元從指令予以解碼(decode) 控制單元將指令中用來說明要執行什麼動作的這一部份,存入指令暫存器
控制單元將指令中用來說明相關資料所儲存之位置這一部份,存入位址暫存器。
執行週期
控制單元根據位址暫存器內的資訊,從主記憶體中讀啟所需的資料,並將其存入ALU的儲存暫存器內。
控制單元根據指令暫存的資訊,命令ALU去執行所需的運算。
ALU執行所需之運算,它會將發現於儲存暫存器以及累加器內的數值予以相加。
運算結果再存回累加器內,這個動作會清除累加器原先所儲存的數值。
我們從鍵盤鍵入一個命令、資料或用滑鼠從畫面中選取某個選項之後,電腦系統為了執行此一命令或處理資料時,會先翻成電腦內部看得懂的機械語言指令(Machine Language Instruction)。而處理每一個機械語言指令時,資料會傳送或來自記憶體或輸入/輸出單元。如此每一次的傳送或接收的動作稱為機器週期(Machine Cycle)。機器週期又可分為兩部份:指令週期(Instruction cycle,I-cycle)與執行週期(Execution cycle,E-cycle)。 在指令週期中,控制單元會從記憶單元取出下一待執行的指令。在執行週期(E-cycle)內所執行的工作包含:找出資料、執行指令,以及將結果存到累加器內。
指令週期
控制單元從主記憶體中提取下一個所要執行的指令。
控制單元從指令予以解碼(decode) 控制單元將指令中用來說明要執行什麼動作的這一部份,存入指令暫存器
控制單元將指令中用來說明相關資料所儲存之位置這一部份,存入位址暫存器。
執行週期
控制單元根據位址暫存器內的資訊,從主記憶體中讀啟所需的資料,並將其存入ALU的儲存暫存器內。
控制單元根據指令暫存的資訊,命令ALU去執行所需的運算。
ALU執行所需之運算,它會將發現於儲存暫存器以及累加器內的數值予以相加。
運算結果再存回累加器內,這個動作會清除累加器原先所儲存的數值。
2014年6月5日 星期四
CodeIgniter trace code 1
最近想嘗試了解 CI
想知道如何實現 MVC 的架構
故花 10 分鐘簡單的 trace 一下
程式入口點是 index.php -> core/CodeIgniter.php
裡面有 1 個 $OUT 變數會去 load CI_Output 的 class
最後會呼叫 __display 或是 _display_cache 的方法(視有無 catch 而訂)
至於在 __display 裡面會 echo $output
$output 便是網頁呈現的內容
想知道如何實現 MVC 的架構
故花 10 分鐘簡單的 trace 一下
程式入口點是 index.php -> core/CodeIgniter.php
裡面有 1 個 $OUT 變數會去 load CI_Output 的 class
最後會呼叫 __display 或是 _display_cache 的方法(視有無 catch 而訂)
至於在 __display 裡面會 echo $output
$output 便是網頁呈現的內容
2014年5月26日 星期一
Garmin Vivofit 讓人失望
買來已經快一個月了,原本都用得很開心
從上星期開始,陸續出現幾個問題:
1. 電腦同步後進入 Connect 首頁,於睡眠方塊頁面中會出現確認睡眠時間的視窗訊息方塊(發生2次)。
2. 電腦同步後進入 Connect 首頁,睡眠的結束時間不正確(發生3次)。
今早詢問客服後,據客服說法:
1. 每次都詢問才是正常,所以是我新電腦不正常?
2. 同1,確認方塊的預設時間是原本設定的,而不是每天按到 SLEEP MODE 跟起床長按解除的時間。
根據說明書58頁的說明
看起來是我中文不好,誤會了說明書的意思?
另外, Connect 首頁,於裝置方塊頁面中按下常見問題集,會跳出一個 500 error 的視窗,若不是沒有說明頁,我才懶得打電話問客服,感覺客服訓練不是很好,像在公家機關詢問公文系統廠商的感覺一樣,對他們的回答都必須打問號。
總之,一整個讓人失望。
Bug 紀錄:
1. 5/29 同步後,發現 5/28 的睡眠結束時間又錯亂了。
2. 5/30 同步後,發現 5/29 的睡眠結束時間又錯亂了。
感覺就是放在 Server 上的資料有問題,真是讓人生氣。
誰要 500 我就給他,這樣的出錯頻率,不值 3990 的價值。
從上星期開始,陸續出現幾個問題:
1. 電腦同步後進入 Connect 首頁,於睡眠方塊頁面中會出現確認睡眠時間的視窗訊息方塊(發生2次)。
2. 電腦同步後進入 Connect 首頁,睡眠的結束時間不正確(發生3次)。
今早詢問客服後,據客服說法:
1. 每次都詢問才是正常,所以是我新電腦不正常?
2. 同1,確認方塊的預設時間是原本設定的,而不是每天按到 SLEEP MODE 跟起床長按解除的時間。
根據說明書58頁的說明
看起來是我中文不好,誤會了說明書的意思?
另外, Connect 首頁,於裝置方塊頁面中按下常見問題集,會跳出一個 500 error 的視窗,若不是沒有說明頁,我才懶得打電話問客服,感覺客服訓練不是很好,像在公家機關詢問公文系統廠商的感覺一樣,對他們的回答都必須打問號。
總之,一整個讓人失望。
Bug 紀錄:
1. 5/29 同步後,發現 5/28 的睡眠結束時間又錯亂了。
2. 5/30 同步後,發現 5/29 的睡眠結束時間又錯亂了。
感覺就是放在 Server 上的資料有問題,真是讓人生氣。
誰要 500 我就給他,這樣的出錯頻率,不值 3990 的價值。
2014年5月1日 星期四
2014年4月6日 星期日
2014年3月21日 星期五
2014年3月1日 星期六
daily money 搜尋 ready
感謝 Lancelot
直接用他改好的 Code
我的 daily money 終於可以 search 了
幸好一直有在 follow
才知道改了什麼
不過也是花了我半小時
下次可能就沒那麼幸運了
我的版本已經跟作者版和 Lancelot 版越差越多了
不會 java 改 Android 真是辛苦呀
直接用他改好的 Code
我的 daily money 終於可以 search 了
幸好一直有在 follow
才知道改了什麼
不過也是花了我半小時
下次可能就沒那麼幸運了
我的版本已經跟作者版和 Lancelot 版越差越多了
不會 java 改 Android 真是辛苦呀
2014年2月3日 星期一
SNMP 監控印表機
原本監控公司所有的印表機耗材使用情形是使用自己寫的程式。
原理是將每個印表機的耗材網頁抓回來,再去裡面 parsing 出我要的資料,不過遇到 EPSON 機器就沒輒,因為他使用 java applet,呈現出來的不是文字網頁,所以我也沒辦法 parsing。
之前有想過利用 SNMP 協定來跟 EPSON 機器溝通,但我一直以為 EPSON 是用 private 的 ID,故一開始方向就錯了,當然也不可能在網路上找到相關資料,理論上 private 也是要註冊,故找到管理組織應該也是可以?
最近剛好看到 1 個 PHP SNMP Library,試了一下還是無法抓取 EPSON 的資料,不過在研究 source code 的過程中,才發現原來是我誤會了,只要用 snmpwalk 的方式,就能順利抓到資料。
原理是將每個印表機的耗材網頁抓回來,再去裡面 parsing 出我要的資料,不過遇到 EPSON 機器就沒輒,因為他使用 java applet,呈現出來的不是文字網頁,所以我也沒辦法 parsing。
之前有想過利用 SNMP 協定來跟 EPSON 機器溝通,但我一直以為 EPSON 是用 private 的 ID,故一開始方向就錯了,當然也不可能在網路上找到相關資料,理論上 private 也是要註冊,故找到管理組織應該也是可以?
最近剛好看到 1 個 PHP SNMP Library,試了一下還是無法抓取 EPSON 的資料,不過在研究 source code 的過程中,才發現原來是我誤會了,只要用 snmpwalk 的方式,就能順利抓到資料。
2014年1月5日 星期日
IBM R51 SSD
最近一直在考慮要不要換筆電
Lenovo ThinkPad T430 2344-1D9
目前 R51 有 2 個問題
1. 關機後延長線開關不能關,否則開機要重設日期時間
2. 超過 1 天以上沒開機,按下開關沒有回應
以上 2 個問題好像是互斥的,但他就是發生了XD
個人猜測是水銀電池的問題
不過 IBM 模組感覺是直接焊在電池上
所以我也懶得拆機來換
T430 考慮了老半天
龜毛的我還是放棄
買了顆 INTEL SSD 530 + 光碟機抽換盒
開機跟操作果然明顯變快
不過只能跑在 UDMA2
當初如果買 2.5 吋 mSATA to IDE 轉卡 + INTEL mSATA
不知道是不是就能夠順利跑在 UDMA5
功課果然做太少
果真千金難買早知道
Lenovo ThinkPad T430 2344-1D9
目前 R51 有 2 個問題
1. 關機後延長線開關不能關,否則開機要重設日期時間
2. 超過 1 天以上沒開機,按下開關沒有回應
以上 2 個問題好像是互斥的,但他就是發生了XD
個人猜測是水銀電池的問題
不過 IBM 模組感覺是直接焊在電池上
所以我也懶得拆機來換
T430 考慮了老半天
龜毛的我還是放棄
買了顆 INTEL SSD 530 + 光碟機抽換盒
開機跟操作果然明顯變快
不過只能跑在 UDMA2
當初如果買 2.5 吋 mSATA to IDE 轉卡 + INTEL mSATA
不知道是不是就能夠順利跑在 UDMA5
功課果然做太少
果真千金難買早知道
SSD HD Tune
SSD Test1
SSD Test2
IDE 320G HD Tune
IDE 320G Test
訂閱:
文章 (Atom)