2017年11月30日 星期四

[c++] typedef與函數指標


Consider the following code, which does not use a typedef:

int do_math(float arg1, int arg2) {      return arg2;  }    int call_a_func(int (*call_this)(float, int)) {      int output = call_this(5.5, 7);      return output;  }    int final_result = call_a_func(&do_math);

This code can be rewritten with a typedef as follows:

typedef int (*MathFunc)(float, int);    int do_math(float arg1, int arg2) {      return arg2;  }    int call_a_func(MathFunc call_this) {      int output = call_this(5.5, 7);      return output;  }    int final_result = call_a_func(&do_math);

ref:
https://en.wikipedia.org/wiki/Typedef

[Driver] WDF 、WDK、WDM、DDK

WDF使用WDK
WDF -  Windows Driver Frameworks (Vista後),分
WDK - Windows Driver Kit

WDM使用DDK
WDM - Windows Driver Model (2000/XP/2003)
DDK - Driver Developer Kit


WDK像DDK的升級版



 WDF驅動程序包括兩個類型,一個是內核級的,
 稱為KMDF(Kernel-Mode Driver Framework),為SYS文件;
 另一個是用戶級的,稱為UMDF(User-Mode Driver Framework),為DLL文件。
 
 
 
 ,而wdk是基於WDF驅動模型的,wdm驅動模型和wdf驅動模型的最大的區別是:

1)wdf驅動框架對WDM進行了一次封裝,WDF框架就好像C++中的基類一樣,且這個基類中的model,IO model ,pnp和電源管理模型;且提供了一些與操作系統相關的處理函數,這些函數好像C++中的虛函數一樣,WDF驅動中能夠對這些函數進行override;特別是Pnp管理和電源管理!基本上都由WDF框架做了,而WDF的功能驅動幾乎不要對它進行特殊的處理;

2)WDF驅動模型 與WDM驅動模型的另外一個主要區別是:

WDF 驅動采用隊列進行IO處理,而WDM中將所有的IO操作都用默認的隊列進行處理,如果要進行IRp同步,必須使用StartIO;

3)WDF是面向對像的,而WDM是面向過程的,WDF提供對像的封裝,如將IRP封裝成WDFREQUEST,對像提供方法和Event。

5)usb設備的讀寫;

當應用程序使用ReadFile或WriteFile進行讀寫時,首先將

UsbBuildInterruptOrBulkTransferRequest將構建urb請求,然後通過IoCallDriver發送給底層usb 總線驅動;

對於WDF來說,WdfUsbTargetPipeFormatRequestForRead 格式化讀請求,然後使用WdfRequestSend  發送給底層Usb總線驅動;

對WDM和WDF的usb的讀寫都可以設置完成例程;

2017年11月23日 星期四

[C++] sscanf, scanf

h = short int 的意思(2字節)

%hu :以 unsigned short格式輸出整數
%hx :以16進制的 輸出short類型的整數 

比如
printf("%hu\n",-30); 會輸出 65506
printf("%hx\n",-30); 會輸出FFE2



short int = [h] + [d, i, o, x, or X]
EX:
scanf_s("%ls", &x, 2);     // Read a wide-character string  
wscanf_s(L"%hC", &x, 2);    // Read a single-byte character  





sscanf, scanf 
The sscanf function reads data from buffer into the location given by each argument. Every argument must be a pointer to a variable with a type that corresponds to a type specifier in format


ex:
int   i, result;
float fp;
char  c, s[81];
wchar_t wc, ws[81];


result = scanf( "%d %f %c %C %s %S", &i, &fp, &c, &wc, s, ws );
printf( "\nThe number of fields input is %d\n", result );
printf( "The contents are: %d %f %c %C %s %S\n", i, fp, c, wc, s, ws);


result = wscanf( L"%d %f %hc %lc %S %ls", &i, &fp, &c, &wc, s, ws );
wprintf( L"\nThe number of fields input is %d\n", result );
wprintf( L"The contents are: %d %f %C %c %hs %s\n", i, fp, c, wc, s, ws);   
   
   
   
ex:   
BYTE  m_bCmd[MAX_CMD_LENGTH_12+1]; // sscanf need length + 1
::sscanf(Buffer, "%2hx %2hx %2hx %2hx %2hx %2hx %2hx %2hx %2hx %2hx %2hx %2hx",  
  &m_bCmd[0],
                                              &m_bCmd[1],
  &m_bCmd[2],
  &m_bCmd[3],
  &m_bCmd[4],
  &m_bCmd[5],
  &m_bCmd[6],
  &m_bCmd[7],
  &m_bCmd[8],
  &m_bCmd[9],
  &m_bCmd[10],
  &m_bCmd[11]
  );
  
   
   
REF
https://msdn.microsoft.com/en-us/library/xdb9w69d.aspx
https://msdn.microsoft.com/en-us/library/aa272895(v=vs.60).aspx

[MFC] architecture









[C++] Win32 Console, Win32 Project, MFC Application



一般的開發常用的工程類型也就幾種: 
Win32 Console Application: 控制台應用程序,也是常見的那個黑色命令窗口。 
Win32 Project: 直接用Windows API進行Windows桌面應用程序的開發。 
MFC Application: MFC工程,用微軟提供的類庫進行界面程序的快速開發。



Win32 Console Application
這個就是你最熟悉的控制台應用程序了,編譯成功,運行時會出現一個黑色的命令行窗口
w

Win32 Project
MFC其實是對Windows API進行的一種封閉,使其具有面向對像的特性。而這個Win32 Project工程就是以直接調用Windows API的方式,使用Windows SDK開發帶有窗口界面的程序。



MFC Application
這個就是你平常開發MFC程序時會用到的工程, MFC(Microsoft Foundation Classes)是微軟提供的一個用於Windows程序開發的基礎類庫,也是快速開發Windows上的桌面程序一般會選擇的方式。


MFC DLL
它也是創建一個MFC的程序,與MFC Application的不同之處是:MFC Application工程生成的是一個.exe的可執行文件,而MFC DLL工程生成的是一個.dll的動態庫文件。







REF:
http://blog.csdn.net/luoweifu/article/details/48816605
https://msdn.microsoft.com/en-us/library/windows/desktop/dn614993(v=vs.85).aspx




[C++]ATL、STL、WTL、MFC、GTK、QT、WPF



ATL、STL、WTL、MFC、GTK、QT、WPF



STL即 Standard Template Library (標准模板庫)
STL是惠普實驗室開發的一系列軟件的統稱。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普實驗室工作時所開發出來的。現在雖說它主要出現在C++中,但在被引入C++之前該技術就已經存在了很長的一段時間。
STL的代碼從廣義上講分為三類:algorithm(算法)、container(容器)和iterator(迭代器),幾乎所有的代碼都采用了模板類和模版函數的方式,這相比於傳統的由函數和類組成的庫來說提供了更好的代碼重用機會。
從根本上說,STL是一些"容器"的集合,這些"容器"有list,vector,set,map等,STL也是算法和其他一些組件的集合。這裡的"容器"和算法的集合指的是世界上很多聰明人很多年的傑作。

STL的目的是標准化組件,這樣你就不用重新開發它們了。你可以僅僅使用這些現成的組件。STL現在是C++的一部分,因此不用額外安裝什麼。它被內建在 你的編譯器之內。因為STL的list是一個簡單的容器,所以我打算從它開始介紹STL如何使用。如果你懂得了這個概念,其他的就都沒有問題了。另外,list容器是相當簡單的,我們會看到這一點。
這篇文章中我們將會看到如何定義和初始化一個list,計算它的元素的數量,從一個list裡查找元素,刪除元素,和一些其他的操作。要作到這些,我們將會討論兩個不同的算法,STL通用算法都是可以操作不止一個容器的,而list的成員函數是list容器專有的操作。
STL容器可以保存對像,內建對像和類對像。它們會安全的保存對像,並定義我們能夠操作的這個對像的接口。放在蛋架上的雞蛋不會滾到桌上。它們很安全。因此,在STL容器中的對像也很安全。我知道這個比喻聽起來很老土,但是它很正確。
STL算法是標准算法,我們可以把它們應用在那些容器中的對像上。這些算法都有很著名的執行特性。它們可以給對像排序,刪除它們,給它們記數,比較,找出特殊的對像,把它們合並到另一個容器中,以及執行其他有用的操作。
STL iterator就像是容器中指向對像的指針。STL的算法使用iterator在容器上進行操作。Iterator設置算法的邊界 ,容器的長度,和其他一些事情。舉個例子,有些iterator僅讓算法讀元素,有一些讓算法寫元素,有一些則兩者都行。 Iterator也決定在容器中處理的方向。
你可以通過調用容器的成員函數begin()來得到一個指向一個容器起始位置的iterator。你可以調用一個容器的 end() 函數來得到過去的最後一個值(就是處理停在那的那個值)。
這就是STL所有的東西,容器、算法、和允許算法工作在容器中的元素上的iterator。 算法以合適、標准的方法操作對像,並可通過iterator得到容器精確的長度。一旦做了這些,它們就在也不會"跑出邊界"。還有一些其他的對這些核心組件類型有功能性增強的組件,例如函數對像。


STL有6大組件:algorithm(算法)、container(容器)、iterator(迭代器)、function object(函數對像)、adaptors(適配器)和allocator(記憶體配置器),其中最主要的是前三個組件。

-----------------------

ATL: Active Template Library (活動模板庫)
可以看一下潘愛民關於《ATL Internals》的書評:
ATL是一個產生C++/COM代碼的框架,就如同C語言是一個產生彙編代碼的框架
ATL又不同於MFC,它完全面向COM組件,其技術路線也不同於MFC,MFC使用的是C++中的繼承、封裝、嵌套等常規技術,而ATL使用了C++中模板、多繼承等高級技術,甚至還用到了STL。所以學習和使用ATL要求我們必須熟悉這些C++高級特性。另一方面,ATL結構完全針對COM中的諸多規範,這就要求使用人員必須非常了解COM規範,才有可能真正把ATL用好
對於COM應用的開發,ATL無疑是首選的工具,與MFC相比,ATL的規模還不算大,但是從上述的介紹我們可以看出,ATL涉及到了COM的方方面面。 實際上,ATL的內容還要多得多,比如OLE DB的支持、MTS的支持等,盡管如此,如果我們有了這本書中的內容為基礎,那麼再去學習這些擴展的內容就會容易得多,結合ATL中實現COM的基本手段 加上這些應用技術的背景知識,我們可以很容易地掌握這些開發技術。
但是如果我們要想熟練掌握甚至精通ATL的話,那麼這只是一個開頭,前面還有漫長的路要走。原因有多方面,一則COM本身異常復雜,不下苦功難窺全貌;二則ATL確實奧妙很多,它體現了C++語法的博大精深;三則ATL還存在很多錯誤,雖然本書作者指出了一些錯誤,但實際的錯誤肯定更多,這就對ATL使用者提出了更高的要求,如果使用過程中不能發現這些錯誤或者避開這些錯誤,那麼用ATL反而會阻礙我們的工作。
雖然ATL比較精深,但是這本書的講解非常通俗易懂,語言比較簡練,條理非常清楚。即使在讀完這本書之後,它仍然可以作為參考書指導我們的開發和學習工作。我想,這就是好書的價值所在吧。


使用ATL能夠快速地開發出高效、簡潔的代碼(EffectiveandSlim code),同時對COM組件的開發提供最大限度的代碼自動生成以及可視化支持。
入口函數為 DllMain (進程內組件)
入口函數為 tWinMain (進程外組件)
入口函數為 CWinApp (ATL支持MFC)
在ATL產生以前,開發COM組件的方法主要有兩種:一是使用COM SDK直接開發COM組件,另一種方式是通過MFC提供的COM支持來實現。
首先ATL的基本目標就是使COM應用開發盡可能地自動化,這個基本目標就決定了ATL只面向COM開發提供支持。
其次,ATL因其采用了特定的基本實現技術,擺脫了大量冗余代碼,使用ATL開發出來的COM應用的代碼簡練高效,即所謂的"Slim Code"。
第三,ATL的各個版本對Microsoft的基於COM的各種新的組件技術如MTS、ASP等都有很好的支持,ATL對新技術的反應速度大大快於MFC。ATL已經成為Microsoft支持COM應用開發的主要開發工具,因此COM技術方面的新進展在很短的時間內都會在ATL中得到反映。這使開發者使用ATL進行COM編程可以得到直接使用COMSDK編程同樣的靈活性和強大的功能。


-----------------------
WTL = Windows Template Library

WTL都算不上什麼Framework,就是利用泛型特性對Win API做了層封裝,設計思路也沒擺脫MFC的影響,實際上用泛型做UI Framework也只能算是一次行為藝術,這個思路下繼續發展就會變得沒法用了,比如 代碼過於復雜,編譯太慢,出錯不好調試等問題難以解決。而且封裝得也不完全,還是隨處可見 HWND HDC之類的東西。用途主要是寫一些很小的程序,或者作為其他UI框架的後端實現部分,比如我寫過一個小框架用來做安裝卸載程序,非常小,其中創建管理窗口部分是用WTL的。

Windows Template Library(WTL)是一個用於Win32研發的物件導向的C++模板函式庫。WTL由Microsoft的員工Nenad Stefanovic創造,起初作為內部使用,之後發行為Visual Studio和Win32 Framework SDK的不支援增益集。它主要被開發作為Microsoft Foundation Classes的輕量化替代品,以微軟ATL函式庫(另一個被應用在創造COM與ActiveX的輕量函式庫)為基礎。

可以說起源於ATL 類庫中關於Window 創建/管理的類。主要原因是用原始的 WIN32 API 編寫漂亮的用戶界面工作量大,繁雜。MFC 雖然提供了一套很好的封裝,但是也不是很容易消化和使用,特別是各個MFC 類之間耦合很緊,要用好 MFC 就要理解很多 MFC 內在的運行機制(有人說 MFC 的封裝是"白盒"封裝,呵呵)。WTL 利用 C++ 模版的高級功能,提供很聯系很松散的"獨立"的類庫,使用起來比較方便,而且代碼體積小,不必為了學習某個類必須學習一大堆相關的類。

-----------------------


MFC是更高級點的Win API封裝,比WTL封裝徹底,很難見到HWND HDC了,也提供了不少實用工具類,比如高級控件,泛型容器,IO訪問,網絡協議等。除此之外,還提供了一些基本框架,比如 Document/View,這就是個MVC的簡化版本,只有MV,但是對於數據的管理,消息的傳遞等又沒有什麼約束,導致Doc/View被用得亂七八糟。尤其是對事件處理的模型,消息映射是功能簡陋,而且容易出錯的方式,唯一優點是性能好。 從VC++ 1.X就有MFC了,那時整個UI界的設計思想都比較落後(除了Apple),MFC又背負了沉重的兼容性包袱,比如vc++ 1.52的MFC程序到了vc2003稍加修改都可以編譯,導致MFC後期沒有什麼發展,就是沿著老的思路完善了些細節,添加了些組件,但是根本性的設計問題沒有改進。

-----------------------

GTK,這個吃了語言的虧,用C寫面向對像實在是痛苦,雖然在思想上比MFC要先進了些,但是寫出來的代碼比MFC要羅嗦很多了。相比MFC,多了Layout的概念,事件處理上有了Signal/slot,雖然用起來很麻煩。wxWidgets,這個基本就是個跨平台的MFC,對各個平台的差異做了抽像,實際上後端大多還是用平台原生的API實現,好多控件都是直接用系統原生的。有wxWidgets for GTK+的版本,後端就是GTK+,wxWidgets就是一層殼。這也是wxWidgets的優點,它編譯出來的程序發行包比較小,性能也不錯。



***************************************************
***************************************************

以上這些就是上世紀90年代的UI Framework技術水平了,至今它們也依然沒有太多進步。下面來談談21世紀的技術。Qt,雖然它也是上世紀90年代出現的,但是它在21世紀有了長足的進步。應該說它的起點就比較高,一開始就定位跨平台,而且不滿足於簡單封裝系統API,而是要自己創造出一套完整的API和框架,甚至要代替系統API,所以不僅僅是做UI,而是涉及到了APP開發所用到的所有東西,包括網絡,數據庫,多媒體,腳本引擎等。signal/slot是Qt發明的,這是事件通知模型裡C++語言的最佳實現了,甚至我都覺得這該寫進C++標准,估計C++委員會的老頑固們是從不寫GUI的。早期的QT也是沒有DirectUI的概念的,每一個QWidget都對應一個原生窗口,從Qt4.4開始,只有頂層QWidget才是原生窗口,而Child Widget是Alien Widget,只是個抽像的圖層不對應原生窗口,這就實現了DirectUI的概念,很多圖形效果也就變得可能了,比如窗口層疊透明效果。在4.8後實現了QPA(Qt Platform Abstraction),這就使移植Qt變得很容易,目前Qt是支持平台最多的框架沒有之一。由於早期授權的問題,Qt對於開源社區不是很友好,導致推廣不太順利,直到它改成了LGPL方式,如果Qt能早點想開了,恐怕就沒有wxWidgets的生存空間了。Qt的缺點也是有的,就是太大,不過可以自己剪裁,我可以把QT庫剪裁到發行包壓縮後2.5MB。


-----------------------

WPF,微軟在Win Form的思路上走到死胡同後,終於痛下決心用正確的方法開發UI庫了。21世紀的UI一定是定義出來的,絕對不能是代碼寫出來的,所以有了XAML這個強大的定義工具,不但可以定義UI布局,還包括圖形動畫效果,消息響應方式等。配合C#這種優秀的語言,更是如虎添翼。但是問題也很明顯,就是過於龐大,不僅開發時要用到龐大的IDE和設計工具,發行的安裝包也十分巨大,所以目前還是很少有人拿他寫通用軟件客戶端的,大多是做企業項目時寫專用客戶端。大概4-5年前吧疼訊曾經用WPF寫了個QQ,但是只實現了基本功能就已經比C++客戶端大好多了,而且運行緩慢,主要是太吃內存,而且那時WPF的優化還不充分。


-----------------------

如果僅在Windows下,追求程序小巧,用WTL,不足的地方自己實現去吧,但是視覺效果就呵呵了。如果可以大一點,還要好看點,那就Qt。如果完全不在乎大小,只要視覺效果華麗,就用WPF,如果把開發工具價格也考慮進來,那麼土豪才會選WPF呢。MFC就是個雞肋了,除非你現有的工程師不會用別的,或者有歷史遺留代碼要保持兼容。

如果要求跨平台,那麼就用Qt


-----------------------


REF:

https://www.zhihu.com/question/23480014/answer/24809080
https://zh.wikipedia.org/wiki/Windows_Template_Library
http://blog.csdn.net/xdrt81y/article/details/17143135

2017年11月22日 星期三

[News]欠扁的小明

欠扁的小明又來了(..)

1.

老師:地上的香蕉皮是誰吃的?

小明:老師,皮是誰吃的我不知道,但香蕉是我吃的。

老師:.....x

2.

老師:學校要建游泳池,請大家樂捐。

小明:老師,我捐兩桶水。

老師:....x

3.

老師:金錢與智慧,你們會選擇什麼?

小明:我當然是選金錢!

老師:但我會選擇智慧,你知道為什麼嗎?

小明:當然,人們都會選擇自己缺少

的東西,我能理解!

老師:.....x

4.

老師:每人想一下,寫一篇關於人的作文,重點是要寫突出的地方。

小明:老師,我想好了!我就寫我的奶奶。

老師:那你的奶奶有什麼突出的地方嗎?

小明:我奶奶椎間盤突出!

老師:.....x

5.

老師:你為什麼要趴在桌子上睡覺?

小明:老師,能躺的話,誰願意趴着睡啊!

老師:.....x

2017年11月21日 星期二

[Outllook]匯入、匯出,備份郵件


匯出








匯入:










[News] 安霸 vs Gopro 2017


分析了安霸在最近一年來的業績下滑的原因,給投資者提供了一些投資參考,對camera從業人員而言,這篇文章也具有一定的啟示意義。

由於來自運動相機與無人機相機市場疲軟的需求以及自身業務緩慢的增長,最近12個月,安霸的股票下跌了差不多30%。除市場需求原因之外,安霸的isp soc在與對手的競爭中的優勢不足也是其業績下滑的一個重要原因。


曾經有投資分析家說安霸的isp soc是'best in breed'----同類中最好的:這就是為什麼GoPro,DJI,海康威視,最大的運動相機廠商,最大的無人機廠商,最大監控相機廠商,都選擇安霸ISP晶片的原因。但是幾個月以前,GoPro和DJI都迅速的轉離安霸,連google的clip camera也做出了同樣的選擇。下面就說說這幾個公司到底做了什麼選擇。


 
先說GoPro。可以說Gopro是安霸的頂級客戶,但這種關係也可以說是把雙刃劍,一方面從2014到2015年,由於GoPro良好的業績把安霸的業績也推導了歷史的頂峰,但是隨著GoPro業績的迅速下滑,安霸也受到了非常大的影響。



GoPro利潤的嚴重下滑,使得其一方面必須消減成本,另一方面,GoPro必須採用訂製化的ISP設計實現產品差異化,以避免採用安霸晶片導致與競爭對手產品的同質化問題。

DJI在最近也發布了新的無人機Spark,同樣沒有採用安霸的晶片組,取而代之的是採用intelMovidius的Myriad 2 VPU;DJI以前用在它的旗艦產品phantom 4上,用Myriad 2與安霸的ISP soc晶片一起工作,現在則用Myriad 2既做CV也完成了圖像處理任務。這一警報預示著安霸的isp soc很可能會在以後會被完全放棄。



google也在其clip camera里採用了Myriad 2,運行google的machine learning 算法,配合ISP,實時處理相機的圖像。以前google是把這一方案用在其增強現實AR的功能中。



所以,從安霸的角度來說,迅速的在其方案中補足CV部分的短板是至關重要的,但是intel 的Myriad 2有先發優勢。而且從體量上看,巨無霸intel顯然更具實力。所以從戰略上看,去年intel收購Movidius對安霸產生了致命的影響。

 

由於在消費相機市場的下滑,安霸想要爭取開拓車載市場,而這一市場早已是巨頭扎堆。ARM今年剛剛發布了針對車載市場的Mali C71 ISP方案,高通也收購了NXP,意在搶占車載市場,Intel更不用說,收購了Movidius和mobileye,甚至NV也要進入這一市場。這些公司的體量都比安霸大的多。



不僅被這些歐美巨頭壓制,安霸也受到來自於中國安防isp soc晶片廠商的強烈競爭壓力,導致其上季度毛利率下跌410個基點。


 
在消費相機市場,以前仿效GoPro的公司也可能會才取GoPro同樣的策略----轉向訂製ISP方案,這種示範效應對安霸來說是非常危險的。包括英國的ARM,日本的Socionext等公司都提供訂製ISP的解決方案,這將對現在相機產品的市場格局產生很大影響。尤其在消費相機領域,由於現在產品的同質化嚴重,導致只能依靠血拚成本進行價格競爭,這一狀況驅使相機產品公司從設計和成本雙重角度來考慮建立新的優勢以擊敗競爭對手,尋求訂製ISP的方案將會是優先考慮的一個選項。



DJI SPARK



Socionext GP1 for GoPro Hero6

ref:
https://read01.com/zh-tw/xDgQR5J.html#.WhUYYVXXZjV

[SSD] Speed for PCIE, Sata, USB, Thunderbot





PCI Express connectors:


SATA Connectos





thunderbolt connector



USB1, 2, 3  Connectos


type a, b, c connectors


REF:
https://zh.wikipedia.org/wiki/SATA
https://zh.wikipedia.org/wiki/PCI_Express
https://eeecommunity.blogspot.tw/2015/10/the-difference-between-usb-20-and-usb-30.html
https://www.scienceabc.com/innovation/usb-type-c-different-usb-type-type-b.html



[SSD] Micro SD Speed and Price for Gopro 4k video (2017)



 SanDisk microSDXC 64G Extreme Pro 



UHS-I



UHS-II







Gopro 4k video requires  & recommend 


備註:
  • 4K Ultra HD (3840x2160) 
  • Full HD (1920x1080) 
  • UHS(Ultra High Speed)(U1, U3),匯流排標準
  • SDXCSecure Digital eXtended Capacity)(I、II、II),SD3.0標準
  • Video Speed Class(v10、V20、V30)







REF:
https://www.sdcard.org/cht/developers/overview/bus_speed/index.html
https://www.sandisk.com.tw/home/memory-cards/microsd-cards/extremepro-microsd-uhs-ii
https://zh.wikipedia.org/wiki/SDXC
https://gopro.com/help/articles/Block/microSD-Card-Considerations

[SSD] RDT、MP、RMA


RDT- Reliability Development Test 可靠性發展測試

MP - MASS PRODUCT 量產

RMA- return Material authorization 材料回收處理

2017年11月16日 星期四

[Chrome][DownAlbum] download picture from instagram, facebook,臉書下載照片


Howto:
1.更多工具-> 擴充功能 ->取得更多擴充功能-> 搜尋downalbum->安裝好後,重啟Chrome
2.開啟Facebook,開啟相簿 ->按chrom上的DownAlbum->選Normal ->等待下載完成->選2次change name ->選Auto zip all ,打包後就會自動下載成zip檔

搜尋downalbum







安裝好後,重啟Chrome-






開啟臉書,開啟要下載的相簿,點右上角DownAlbum








選Normal




下載中





下載完成





按2次 ChangeName,再按Auto Zip all




會自動下載到Chrome的預設下載路徑,解壓後就看到照片

2017年11月15日 星期三

[MFC][VS2013]PreTranslateMessage Event Example



BOOL CMFC_CallbackApp::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
switch (pMsg->message)
{
case WM_MOUSEMOVE:
switch (pMsg->wParam){
case MK_LBUTTON:
::MessageBoxA(NULL, "MK_LBUTTON", "MK_LBUTTON", NULL);
break;
case MK_RBUTTON:
::MessageBoxA(NULL, "MK_RBUTTON", "MK_RBUTTON", NULL);
break;
}
break;

case WM_LBUTTONDOWN:
::MessageBoxA(NULL, "WM_LBUTTONDOWN", "WM_LBUTTONDOWN", NULL);
break;
case WM_KEYDOWN:
switch (pMsg->wParam){
case VK_RIGHT:
::MessageBoxA(NULL, "VK_RIGHT", "VK_RIGHT", NULL);
break;
case VK_F2:
::MessageBoxA(NULL, "VK_F2", "VK_F2", NULL);
break;
}

default:
break;
}

return CWinApp::PreTranslateMessage(pMsg);
}



Mouse Event
https://msdn.microsoft.com/zh-tw/library/windows/desktop/ff468877(v=vs.85).aspx
https://msdn.microsoft.com/zh-tw/library/windows/desktop/ms645616(v=vs.85).aspx



Key Event
https://msdn.microsoft.com/en-us/library/windows/desktop/ms646268(v=vs.85).aspx



執行畫面,按鍵"→" 

[mfc][vs2013] PreTranslateMessage






點第六個圖示, overrides ,會顯示需要重寫的PreTranslateMessage 




source code 就會自動出現PreTranslateMessage

[C++]常用開源代碼網站, source code常用網站

http://so.csdn.net/CSDN還是有非常多的編程資源的,用它的搜索能搜出不少東西。代碼類別也比較全面。
http://snippets.org/(維護中)簡單實用的代碼收集網站,強力推薦。比如你要找個DES加密,要找個數據壓縮,找個INI文件操作的C代碼等,均能手到擒來。
http://www.codase.com/index.html(維護中)它是一個代碼搜索引擎,特別是搜索c/c++的開源代碼,可以通過函數名、類名等搜索,很酷噢
http://sourceforge.net有名的開源代碼庫,只要能想到的功能,上面都有對應的源碼
http://www.tigris.org/和上面的sourceforge一樣的開源代碼庫,不過sourceforge用CVS,而這個用SVN版本管理。
http://cosoft.org.cn/中文版的開源代碼庫,好像是由sourceforge直接翻譯過來的。其同步性等尚未考察。
http://codeguru.comhttp://codeproject.com這兩個站點比較類似,放一起吧。以WINDOWS下的Visual studio編程代碼、教程為主。在以前可是使用MFC的人的必經之地。
http://www.experts-exchange.com/Programming/這是專家問答的網站,在編程方面能夠解決不少問題。
http://www.koders.com/也是一個代碼搜索引擎,與codase差不多,並且能查找指定許可的代碼
http://groups.google.com/找代碼,決不能忘記google的groups。一定要去噢。國內的兄弟可能訪問時不穩定,就用代理吧。如果你用firefox,可以使用我開發的xyzproxy切換代理,很方便噢:)
http://www.thefreecountry.com/sourcecode/index.shtml這也是個源碼碼網站。這個網站的資源還是很多的。
http://www.vckbase.com/VC知識庫,國內比較好的VC資源站 
http://www.programmersheaven.com/開發者天堂? 有一些教程好像不錯。
http://www.cprogramming.com/收集C/C++編程方面資源的網站
http://csourcesearch.net又一個代碼搜索網站,大家試試?
http://www.netlib.org/源代庫索引,有很多數學方面的庫,很好用。要找庫,以此網站著手較
 
不管你是初學一門計算機語言或技術,還是想學習別人的經驗和創意。做為一個開發人員,都會經常需要到搜索一些代碼,下面是7個地方可以幫助你快速尋找到你需要的代碼。
GitHub Code Search
http://github.com/search
熱門的開源代碼庫和和版本控制服務。 GitHub 在最近啟動了 Code Search .即使它才啟動不久,但憑借GitHub 的受歡迎度和成千上萬的代碼庫,GitHub 的這項代碼搜索服務已經非常受歡迎。
Krugle
Krugle 是一個為開發人員量身定做的代碼搜索引擎,他們宣稱可搜索超過25億行的開放源代碼,是互聯網最大的源代碼搜索引擎之一。和傳統搜索引擎不同, Krugle 專門用來搜索代碼,不管是壓縮包文件,還是展示在 blog 、網頁上的代碼,只要是在網絡開放的空間內, Krugle 都能找到,並且 Krugle 還可以自動生成某個特定代碼的 API 報告 ( 尚處實驗階段 ) 。
Krugle 能提供和代碼相關問題的解答。 允許開發人員對搜索結果進行評論,並通過創建 tag 的方式來幫助其他人更好的找到所需的代碼,實現共享。Krugle 具有較快的搜索速度,能對和代碼相關的例如各種技術主題、 API 、示例、文檔進行快速搜索。
Koders
Koders是一個專為開放代碼的搜索引擎。目前可以搜索到424,227,372套程序代碼,並提供了全站更新訂閱。你還可以在你的網站上共享它的代碼搜索服務。每天有30000多開發者在Koders上搜索766000000行的代碼,包括高達30種編程語言和28種軟件license。
Codase
Huihong Luo 等人在硅谷創辦一家名為 Codase.com 的程序源碼搜索引擎,用戶可以通過項目、類、方法及字段等來搜索程序源代碼;最初只針對 Linux 平台的 C/C++ 開源項目源碼搜索,目前已包含了 Windows 平台及 Java 語言相關的源碼搜索,計劃不久將提供對 C#、Visual Basic、Perl、PHP、Python、Ruby 等程序設計語言的支持;據 Codase 稱現在已可搜索超過 250,000,000 行的源代碼,並致力成為最為專業的源碼搜索引擎。
Snipplr
Snipplr是一個開放的源代碼技巧分享社區,號稱Code 2.0。和一般的源碼分享網站不同,它針對的並不是大型網站源碼,而是一些編程的代碼技巧。比如針對IE的CSS代碼Hack,javascript的隱藏和顯示效果代碼,CSS圓角效果代碼等等。具有分類和Tag支持,以及搜索,評論和收藏等等功能。
DZone Snippets
擁有超過13,000 用戶提供的 5,000多代碼摘錄, DZone Snippets 是一個尋找代碼示例的好地方.
Google Code Search
這個就不用多做介紹了。
開發軟件,最痛苦的是找到思路,這時如果有個相似的源代碼供參考,有時會起到事倍功半的效果,由於國外的技術比我們發展的早,參考國外網站上的源代碼,對我們來說是一個不錯的方法,下面是我在網上搜集的一些國外網源代碼網站(希望不要說我崇洋媚外)
http://www.hotscripts.com/
http://www.scripts.com/
http://www.devscripts.com/
http://freshmeat.net/
http://www.scriptsearch.com/
 
Perl & Cgi
http://www.hotscripts.com/Perl
http://cgi.resourceindex.com
http://www.onlycgi.com
http://www.freescripts.com/scripts
http://awsd.com/scripts
http://www.mycgiscripts.com
http://www.smarterscripts.com
http://www.cgiscript.net
http://www.cgidir.com
http://www.perlmasters.com
http://www.freescripts.com/scripts
http://awsd.com/scripts
http://www.dreamcatchersweb.com/scripts
http://www.bignosebird.com
http://www.dcscripts.com
http://www.virtualville.com/library/scripts.html
http://www.perlcoders.com
http://www.cgiarchives.com
http://www.icthus.net/CGI-City
Remotely Hosted
http://www.bravenet.com
http://www.cutandpastescripts.com
http://www.authpro.com
http://wwwtoolz.com/home
http://www.bnsoft.net
綜合
http://www.thescripts.com
http://www.onlyscripts.com
http://www.hotscripts.com
http://www.scriptz.com
http://www.comscripts.com
http://www.needscripts.com
http://www.smesource.com/Scripts
http://www.devscripts.com
http://totalscripts.com/pages
http://www.script-index.com
http://www.scriptnow.com/index.html
http://www.bigwebmaster.com
常去的網站:
www.codeproject.com不過不太好注冊
 
國外知名的源代碼網站
http://www.hotscripts.com
– ASP, C C++, CFML, flash, Java, Javascript, PHP, Perl, Python, Remote Hosts and XML scripts (>15000)

http://www.resourceindex.com
– CGI and PHP (>10000)

http://www.scriptsearch.com
– ASP, CFML, C and Cpp, Flash, Java, JavaScript, PHP, Perl, Python, Remotely Hosted, Visual Basic and XML scripts (>10000)

http://www.freshmeat.net
– Everything

http://www.devscripts.com
– ASP, Coldfusion, JavaScript, Perl, PHP

http://www.phpbank.net
– PHP funnily enough

http://www.scriptz.com
– Only small, but has PHP, JavaScript, Perl and ASP. There are spaces for C C++, CFML, Python and XML

http://sourceforge.net/
–free Open source, 國外最著名的開源組織,上面可以找到成千上萬的開源項目,包括apache ,mysql ,php,phpbb,….
http://snippets.org/
簡單實用的代碼收集網站,強力推薦。比如你要找個DES加密,要找個數據壓縮,找個INI文件操作的C代碼等,均能手到擒來。
http://www.codase.com/index.html
它是一個代碼搜索引擎,特別是搜索c/c++的開源代碼,可以通過函數名、類名等搜索,很酷噢
http://www.tigris.org/
和上面的sourceforge一樣的開源代碼庫,不過sourceforge用CVS,而這個用SVN版本管理。
http://cosoft.org.cn/
中文版的開源代碼庫,好像是由sourceforge直接翻譯過來的。其同步性等尚未考察。
http://codeguru.com
http://codeproject.com
這兩個站點比較類似,放一起吧。以WINDOWS下的Visual studio編程代碼、教程為主。在以前可是使用MFC的人的必經之地。
http://www.experts-exchange.com/Programming/
這是專家問答的網站,在編程方面能夠解決不少問題。
http://www.koders.com/
也是一個代碼搜索引擎,與codase差不多,並且能查找指定許可的代碼
http://groups.google.com/
找代碼,決不能忘記google的groups。一定要去噢。國內的兄弟可能訪問時不穩定,就用代理吧。如果你用firefox,可以使用我開發的xyzproxy切換代理,很方便噢:)
http://www.thefreecountry.com/sourcecode/index.shtml
這也是個源碼碼網站。這個網站的資源還是很多的。
http://www.programmersheaven.com/
開發者天堂? 有一些教程好像不錯。
http://www.cprogramming.com/
收集C/C++編程方面資源的網站
http://csourcesearch.net
又一個代碼搜索網站,大家試試?
http://www.netlib.org/
源代庫索引,有很多數學方面的庫,很好用。要找庫,以此網站著手較好
另附一些其他的網站
C/C++是最主要的編程語言。這裡列出了50名優秀網站和網頁清單,這些網站提供c/c++源代碼。這份清單提供了源代碼的鏈接以及它們的小說明。我已盡力包括最佳的C/C++源代碼的網站。這不是一個完整的清單,您有建議可以聯系我,我將歡迎您的建議,以進一步加強這方面的清單。
1、http://snippets.dzone.com/tag/c/--數以千計的有用的C語言源代碼片段
2、http://www.hotscripts.com/category/c-cpp/scripts-programs/Hotscripts --提供數以百計的C和C++腳本和程序。所有程序都分為不同的類別。
3、http://www.planetsourcecode.com/vb/default.asp?lngWId=3--超過萬行C和C++免費的源代碼
4、http://freshmeat.net/powse/164/--超過9000個C編寫的項目。
5、http://www.daniweb.com/code/c.html--DANIWEB提供的實用代碼段。
6、http://www.programmersheaven.com/tags/C/--programmersheaven.com上的C編程資源。
7、http://www.ddj.com/code/ddj.html--Dr. Dobb's Journal的源代碼。
8、http://www.cprogramming.com/cgi-bin/source/source.cgi--C和C + +編程資源。
9、http://www.codecogs.com/--CodeCogs是一項協作的開放源碼庫,C/C++的數值方面的組件。
10、http://www.google.com/codesearch?q=programming++lang:c&cs_r=lang:c--谷歌代碼的C源代碼。
11、http://www.codepedia.com/1/C--CodePedia是一個開放的關於系統編程和其他與電腦有關的議題。
12、http://www.cis.temple.edu/~ingargio/cis71/code/--為學生提供的一個簡單的C語言程序的列表。
13、http://www.codeproject.com/?cat=2--codeproject提供的C/C++資源代碼項目。
14、http://www.thefreecountry.com/sourcecode/cpp.shtml--以下是一些C和C++庫的DLL,VCLs,源代碼,元件,模塊,應用程序框架,類庫,源代碼片段等,你可以在您的項目中使用而不需要支付費用和版稅。
15、http://people.sc.fsu.edu/~burkardt/cpp_src/cpp_src.html--這是一個全面的關於C++的345個源代碼清單。
16、http://www.cplusplus.com/src/--C++寫的通用控制台程序和Windows程序代碼清單。
17、http://users.cs.fiu.edu/~weiss/dsaa_c++/code/--C++語言數據結構與算法分析(第二版)的源代碼。
18、http://c.snippets.org/--C源代碼片段。
19、http://www.bbdsoft.com/downloads.html--C++源代碼。
20、http://www.moshier.net/天文學和數值軟件源代碼
21、http://cplus.about.com/od/cgames/C_Games_with_Source_Code.htm--游戲有關的C++源代碼。
22、http://cliodhna.cop.uop.edu/~hetrick/c-sources.html--免費的C/C++數值計算源代碼。
23、http://www.mathtools.net/C_C__/Utilities/index.html--C/C++工具。
24、http://www.programmerworld.net/resources/c_lipary.htm--免費C++源代碼和其它有用的工具。
25、http://www.cmcrossroads.com/padapp/links/cplusplus-links.html--布拉德阿普爾頓的C++鏈接-資源,項目,圖書館,教學和編碼。
26、http://www.robertnz.net/cpp_site.html--這是一個收集了數C/C++網站鏈接列表的網頁。
27、http://www.josuttis.com/libbook/examples.html--在這裡,你可以看到並下載所有的本書的C++標准庫例子 。
28、--C/C++用戶雜志
29、--Windows開發者網絡
30、http://www.einet.net/directory/65892/Developers.htm--C程序
31、http://www.daniweb.com/code/cplusplus.html--實用代碼段。
32、http://snippets.dzone.com/tag/c--C++源代碼
33、http://www.programmersheaven.com/tags/C--C++編程資源,programmersheaven.com
34、http://www.google.com/codesearch?hl=en&lr=&q=programming--谷歌代碼搜索-C++編程語言
35、http://www.codepedia.com/1/Cpp--CodePedia是一個開放的關於系統編程和其他與電腦有關的議題的網站。
36、http://www.codebeach.com/index.asp?TabID=1&CategoryID=3--C++源代碼,Codebeach提供
37、http://freshmeat.net/powse/165/--5000項目寫的C++編程語言
38、http://cplus.about.com/od/codelipary/Code_Lipary_for_C_C_and_C.htm--代碼庫C、C + +和C#。
39、http://www.c.happycodings.com/--Visual Basic、PHP、ASP技術、C、C++大全。
40、http://www.blueparrots.com/--Borland C游戲,圖像和聲音源代碼範例。
41、http://www.java2s.com/Code/Cpp/CatalogCpp.htm--C++源代碼。
42、http://www.yeohhs.com/modules/mydownloads/--C與C++電子書和源代碼示例。
43、http://www.ppreiss.com/books/opus4/programs/index.htmlC++的數學方程和公式源代碼。
44、http://users.cs.fiu.edu/C++。
45、http://www.josuttis.com/libbook/examples.html--C++標准庫-教程和參考資料。
46、http://emr.cs.uiuc.edu/~reingold/calendars.shtmlEdward M. Reingold's Calendar Book, Papers, and Code。
47、http://cpp.snippets.org/--c++源代碼檔案。
48、http://ubiety.uwaterloo.ca/~tveldhui/papers/techniques/--用C和C++的解決科學問題。
49、http://c.ittoolbox.com/topics/core-c/--C/C++的IT工具框。
50、http://www.le.ac.uk/cc/tutorials/c/ccccdbas.html--本文件中包含有大量的C示例程序

2017年11月14日 星期二

[MFC] Assert 條件不成立,就中斷



第二個b  == 0, 不成立,產生Assertion failed,中斷

[iPhone] 取消付費 App,取消訂閱付款App


設定 -> iTunese與Appstore->按apple ID->檢視Apple ID->訂閱項目->取消訂閱

1.設定


2.


3.檢視Apple ID

4.



5.取消訂閱