發表文章

Win32 螢幕保護程式設計

在專案裡加入 ScrnSave.lib 和 ComCtl32.lib 及 引入 ScrnSave.h 只要撰寫 ScreenSaverProc 函式,而 WinMain 函式會由程式庫提供 ScreenSaverConfigureDialog 函式和 RegisterDialogClasses 函式。 將 Build 出來的執行檔的副檔名 (*.exe) 改為 (*.scr) 底下是個最陽春的範例: // FuzzyScrnSaver.cpp #include <windows.h> #include <scrnsave.h> LRESULT WINAPI ScreenSaverProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_DESTROY: PostQuitMessage(0); break ; default : break ; } return DefScreenSaverProc(hWnd, msg, wParam, lParam); } BOOL WINAPI ScreenSaverConfigureDialog(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) { return TRUE; } BOOL WINAPI RegisterDialogClasses(HANDLE hInst) { return TRUE; } 作有設定功能的螢幕保護程式,通常會將設定的資料存在「系統登錄檔」。 若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

讀書筆記:深入淺出物件導向分析與設計

偉大軟體的三大步驟 1. 確認你的軟體作客戶要他做的事 2. 應用基本的OO原則,增加軟體的彈性 3. 努力達成可維護,可重利用的設計 一個使用案例,三個部分 1. 清楚的價值(Clear value):每個使用案例都必須對系統有清楚的價值。假如使用案例無助於客戶達成目標,這個使用案例便沒有什麼價值。 2. 起點(Starting point)與終點(Stopping point):每個使用案例必須有明確的起點與終點。某件事開始此流程,然後要有條件指明流程已完成。 3. 外部啟動者(External initiator):每個使用案例由外部啟動者開啟,有時,啟動者是人,有時,可能是系統外的任何事物。 查看使用案例裡的名詞(與動詞),並整理出類別的方法與動作,叫做本文分析(textual analysis)。 需求 1. 好的需求確保你的系統如客戶所預期地那樣運作。 2. 確認需求涵蓋系統的所有使用案例。 3. 運用使用案例找出客戶忘了告訴你的事。 4. 使用案例將揭露任何不完整、闕漏的需求,你可能必須將它們加到你的系統裡。 5. 需求將總是隨著時間改變(及成長)。 OO原則: 將變化之物封裝起來。 對介面撰碼,而不是對實做。 應用程式裡的每一個類別只有一個理由改變。 類別是關於行為與功能。 A cohesive class does one thing really well and does not try to do or be something else. 內聚力量度個別的模組、類別與物件各元素之間的連接度(degree of connectivity)。軟體的內聚力越高,應用程式裡每個類別的責任就定義愈好且愈相關(well-defined and related),每個類別就具有特定一組緊密相關的動作要執行。 每個類別都應該試圖確保這件事的發生只有一個理由,這件事代表許多設計不良的軟體片段之死。 Architecture is your design structure, and highlights the most important parts of your app, and the relationships between those parts. 應用程式裡真正重要的事情是...

讀書筆記:危機領導人

The Leadership Challenge 危機領導人 領導的五大金科玉律及十大信條: 勇於挑戰。 尋找機會:挑戰現狀、改造它。 實驗和風險:從錯誤和成功中學習。 激發共同的願景。 預見未來:想像理想狀況。 贏得擁戴:投合他人的價值觀和夢想。 使他人有能力。 培養合作精神:相互信任,推行合作目標。 充分授權:分享權利和資訊。 以身作則。 以身作則:言出必行。 小兵立大功:化承諾為行動。 鼓舞人心。 認可表現:鼓舞他人的士氣。 論功行賞:珍惜勝利的成果。 沒有公信力,就無法領導。 Brian Carroll 領導就是促使他人開拓眼光,尋求改善及挑戰工作方式。 Maureen Fries 假如你認為什麼應該改變,你就必須試著去改變它,不論是否有風險。 Jose Luis Guerrero 沒有任何一個夢想,會因為過於陳舊而無法實現。 Sharon Williams 領導人必須用一種能吸引並鼓舞人的方法,表達出他的願景。 David E. Berlew 讓每個人明瞭這是我們的事業,而我們是掌握自己命運的人。 Robert Owyang 要分享訊息,你的員工才會知道如何協助你,而他們也才會改善企業。 Antonto Zarate 你必須成為別人的楷模。你不能要求別人去做那些連你自己都不願做的事。 Sylvia Yee 營造成功觸手可及的氣氛。 Charlie Mae Knight 人們在乎自己的奉獻受到賞識。論功行賞不必精緻,但要誠懇。 Alfonso Rivera 我們不斷肯定小組與個人的貢獻,以維持高昂的士氣。 Ann Marie Dockstader 我們每個人都有領導的潛能。 David Aronvici 第一承諾 :尋求改變及進步的機會 視每一份工作如冒險。 把每一件任務當作是從頭開始的新工作,縱然它不是。 質疑現狀。 送員工去「血拼」新點子。 把蒐集點子當例行公事。 走出去看看,有什麼東西需要修理。 給人製造機會。 更新工作小組。 為工作加點冒險...

C++:學習STL的理由

底下用三種版本的程式碼說明: /* * 第一版:史前時代--轉木取火 * 採用大容量的靜態數組分配。 * 限定輸入的數據個數。 * 採用動態內存分配。 */ #include <stdlib.h> #include <iostream> using namespace std; int compare ( const void *arg1, const void *arg2); void main ( void ) { const int max_size = 10 ; // 數組允許元素的最大個數 int num[max_size]; // 整型數組 // 從標準輸入設備讀入整數,同時累計輸入個數, // 直到輸入的是非整型數據為止 int n; for (n = 0 ; cin >> num[n]; n ++); // C標準庫中的快速排序(quick-sort)函數 qsort(num, n, sizeof ( int ), compare); // 將排序結果輸出到標準輸出設備 for ( int i = 0 ; i < n; i ++) cout << num[i] << " \n " ; } // 比較兩個數的大小, // 如果*(int *)arg1比*(int *)arg2小,則返回-1 // 如果*(int *)arg1比*(int *)arg2大,則返回1 // 如果*(int *)arg1等於*(int *)arg2,則返回0 int compare ( const void *arg1, const void *arg2) { return (*( int *)arg1 < *( int *)arg2) ? - 1 : (*( int *)arg1 > *( int *)arg2) ? 1 : 0 ; } /* * 第二版:工業時代--組件化大生產 */ #include <iostream> #include <vector...

讀書筆記:會說,才有競爭力

The Quick and Easy Way to Effective Speaking 會說,才有競爭力 交涉談判的心理對策: 控制自己的情緒與態度。 讓對方的情緒保持冷靜。 尋找雙方的共同點。 維護對方的尊嚴。 讓對方了解成功之本。 培養良好人際關係的原則: 關心別人,讚美別人。 常懷謙虛之心,不以傲慢態度對人,要有寬宏大度的胸襟。 要有敬業、樂群的精神,給人積極向上、易於相處的印象。 不要道人長短,不可無中生有,挑撥是非。 培養不批評他人的方法: 深入自我認識與接納。 保有一顆謙卑溫柔的心。 尊重別人並欣賞自己。 企圖改變他人態度與行止時,記住以下原則: 要誠懇,別答應你無法兌現的事,忘掉自己的利益,專心為別人的利益著想。 要確切地知道你希望別人做什麼。 替別人設想。問你自己,別人真正要的是什麼。 評估一下別人若照你的建議去做,利益何在。 把這些利益與他的需要配合一下。 當你提出你的要求時,要讓別人感覺到:「他將會因此而獲益。」 若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

C++ Namespace

N amespace   名稱衝突的問題稱為 global namespace pollution ,而 Namespaces 讓我們可以較為有效地管理這種「全域命名空間的污染問題」。 Library 的作者可以利用 namespaces 機制定義自己的 namespace ,將 library 內的符號名稱隱蔽於 global namespace 之外。例如: namesapce nfu_csie_library { class Math { /*…..*/ }; long getStudentNumber () { /*…..*/ }; } 每一個使用者自定的 namespace 都表現出不同的 namespace scope 。宣告於 namespace 內的物體我們稱為 namespace 成員 (members) 。 Namespace 的定義 namespace namespace_name { /* Member declarations */ /* Member definitions */ } Namespace 的定義區塊並不一定得連續出現。 「同一個 namespace 可跨越不同的程式本文檔」 Example: /* Math.h */ namespace pll_math { double cos( double x) { /*…..*/ }; } /* Math.c */ #include "Math.h" namespace pll_math { double sin( double x) { /* ….. */ }; } Scope 運算子 ( :: operator) 使用者自定的 namespace 中的成員,其名稱會被自動冠以 namespace 名稱做為前導,並加上所謂的 scope(::) 。另外 scope 運算子也可以用來表示 global namespace 的成員 Example: /* ScopeDemo.cpp */ #include <iostream> using namespace std; namespace pll_math{ const ...

讀書心得:沒有圍牆的學校

多年前曾看過 這本書 ,而最近又把這本書快速閱讀一次,我發覺人的所作所為真的會被自己所吸收的知識影響到。原來其中一位作者有自己的 部落格 ,底下是我覺得感觸較深的文章。 --------------------------------------------------------------------------------------------- 精選內文: 三劍客 小郭、小犬以及小紀是三位淘氣的小六生,他們同進同出,在山裡探險,在小溪玩耍,也偶爾惡作劇,他們封自己為主持正義的「三劍客」。 但女生們不太喜歡他們,說他們是名符其實的「三賤客」,常常向自治會揭發他們的敗行劣跡。 有一次,三劍客犯了錯,由老鬍子親自處理。由於我剛進入全人學校,對學校生活教育方式不清楚,但是透過這次的處理,讓我迅速了解學校的運作方式及處理的精神。 農夫擊鼓告狀 事情是這樣的: 某日晚上,老鬍子頭疼又發作,一夜難眠,正要睡著時,門口傳來一陣急過一陣的敲門聲。老鬍子看看腕錶,是清晨五點半,以為是調皮的孩子又來叫他起床跑步或是尿尿呢!正打算來個充耳不聞,卻覺得那口音操著客家腔,不是學校的學生。老鬍子連忙開門,只見山下的吳姓農夫戴著斗笠、穿著雨衣,放了一堆青菜在門口。老鬍子心想:這山上真是民風純樸的福地,下雨天,農夫還敦親睦鄰,趕大清早送菜。正要道謝時,農夫掀起斗笠,露出鐵青臉色,咆哮:「你們這是什麼學校?教出這款糟蹋糧食的學生,什麼不好玩?跑來菜園子裡面拔青菜,當做炸彈來擲,這樣對嗎?我看你們學校應該早早關門啦!」 老鬍子這才大夢初醒,人家是來遞狀紙,不是拉關係,連忙彎腰道歉,表示學校會賠償,給農夫一個交代。送走農民,老鬍子在學校公佈欄貼了一張告示:「我們鄰居的菜園子不幸被破壞了,如果有人知道發生了什麼事情,請今天晚上到我家說明情況。老鬍子字。」 到了晚上,老鬍子召開教師會議,研商解決辦法,但是他講述這件事時,看不出一點懊惱的神情,似乎調侃著自己清晨的窘況。他隨即問在座的老師,「唉!沒辦法,哪個青少年不調皮搗蛋呢?說說看,各位青少年時誰沒有?」 我想到年少時就是父母頭疼的對象,只好在教師會議上噤若寒蟬。倒是數學老師張天安笑著說:「我好像沒有做過什麼不得了的壞事!」 老鬍子大笑說:「難怪你看起來這麼不活潑!怎麼樣?那你青少年時期有沒有想過?」 ...