2016年7月27日 星期三

自動產生Deligate

今天在測試加入/刪除call back func的時候用到 HookHandlerDelegate = new MIL_GRA_HOOK_FUNCTION_PTR(drawRenewHook); MgraHookFunction(graphicListId, MIL.M_GRAPHIC_LIST_MODIFIED, HookHandlerDelegate , M_NULL); vs MIL.MgraHookFunction(graphicListId, MIL.M_GRAPHIC_LIST_MODIFIED, drawRenewHook, M_NULL); 兩個都可以用,but下面那種方式會有無法取消hook的問題

2016年7月22日 星期五

將object的properties/fields取出

今天想寫一個自動把所有object(已實體化 instanced)中的member抽取出來的功能。抽取的目的是要將object的members全部放入一個List中,其他東西呼叫的時候可以直接呼叫List就好。但在coding的時候又可以有class memeber的防呆特性。

is in c#

c#中可以用is來判斷物件的真實型態
並且不論是其本身的class或繼承的基底,甚至是有實現的界面都會回傳true

用powershell重新命名

有時候相機拍的照片都會有DSCxxxx001之類的前置字,可以利用window內建的powershell把它換成有意義的字串
使用方式如下:

C#利用Type建立物件

BaseClass bd = new DClass();
BaseClass newB = (BaseClass)System.Activator.CreateInstance(bd.GetType());
這時候bd.GetType()會得到DClass

2016年7月21日 星期四

用enum value作為array index in C#

為了免code看不懂,可以用enum去指定array的index
ex:
cars[0] = .....
-> cars[(int)carNames.MrsOliver] = ....
 好處是在遙遠的另一邊不用去猜0號車到底是MrsOliver還是MrsMarry

範例:

Schedule[] schedules = new int[Enum.GetNames(typeof(WeekDay)).Length];

enum WeekDay
{
    sun = 0;
    mon = 1;
    tue = 2;
 ...
}

schedules[(int)weekDay.sun] = ....

當然也可以建立個key是enum type的 dictionary
Dictionary<WeekDay, Schedule> schedules = new Dictionary<WeekDay, Schedule>();

就可以直接存取
schedules[weekDay.sun] = ....

2016年7月20日 星期三

override, new, virtual in C# x 指鹿為馬怎麼辦

當衍生/繼承Class有與基礎Class有相同簽名(signature)的成員,就會牽涉到override/new來決定指鹿為馬的時候的行為

範例 程式(C#6.0), 專案執行檔

news in C#6.0 CS 6.0新增功能

What's new in C# 6.0
觀看筆記
沒啥大改,有一些可以讓程式碼乾淨點的小東西
auto properties, static members, String interpolation, Expression bodied methods, Index initializer, Null-conditional operators, The nameof operator, Exception filters

2016年7月19日 星期二

潛水手勢

ok嗎?
ok
不ok
上升
下降
good
空氣完全用完
剩多少空氣?
剩50/70 bar
剩100 bar
1,2,3,4,5,6,7,8,9,9

重裝課(一)

重裝包含了BCD(buoyancy control device)/BC(buoyancy compensator),調節器 regulator,氣瓶Tank。裝拆重裝跟簡單的重裝操作

輕裝課筆記

帶面鏡

頭往前傾,面朝下,將頭髮撥開。先將面鏡放到臉上再拉上頭帶。完成後以食指檢查頭髮有無夾入面鏡

呼吸管爆吐式排水

以嘴唇用力包覆呼吸管,不是用牙齒咬
使用呼吸管需先執行爆吐式排水

面鏡排水

壓面鏡上緣,頭往後仰,以鼻吐氣

踢蛙鞋

台灣多岩岸,常用無後跟式蛙鞋配沙灘鞋,較少使用套腳式蛙鞋
膝蓋不用力,用大腿身體的力量

立泳

慢慢踢即可浮起

2016年7月13日 星期三

pointer in c#

在manage code中使用pointer的方法
這裡會用到
System.Runtime.InteropServices.GCHandle類別,提供從unmanaged memory中存取manage object的方式

使用命名空間
using System.Runtime.InteropServices;

手腕不適

最近攀岩怪怪的
之前找了一些資料說要訓練詰抗肌群
又找了一些討論筆記一下
Snap, Crackle, Wrist
Wrist pain

sofware list

GIMP: image processing
VLC player: movie
thunderbird: mail
autohotkey: daily automation
greenShot: print screen
Libre office: office
notepad++ : doc view

2016年7月12日 星期二

graphic list index & label

在mil的grapic list中每個graphic都有他的label跟index
兩個都是系統指定無法手動更改的
(見MgraInquireList中的M_LABEL_VALUE與M_INDEX_VALUE)
but
index會因為graphic的刪除改變但是label卻是不變的

2016年7月11日 星期一

2016年7月10日 星期日

摺疊獨木舟


今天在朋友臉書上看到有人玩一種很酷的摺紙獨木舟,影片是玩獨木舟的人划到外面然後船進水,他又沒穿救生衣差點GG。
不過看了這個影片也驗證了原廠說船不會沉這件事"Oru Kayaks are naturally buoyant and won’t sink even when submerged"。但如果深入險境,船不沉整個漂走或被大浪打應該也是沒救@@

2016年7月7日 星期四

台美版First WPF Desktop Application差異

最近開始研究wpf,先來個wpf的hello world
Walkthrough: My First WPF Desktop Application
一開始看msdn,應該是因為地區的關係,它會自動引導到台灣網頁
但是因為他的範例一直不能run完,又找不到可以下載的位置
誤打誤撞發現了美版msdn
本來以為美版msdn跟台版msdn只是外觀上的不同..
沒想到台版的msdn裡面竟然埋了bug...難怪不能run

至於為什麼會這樣呢....實在令人費解

btw...這個first application實在有夠難懂

Connecting to Data中2.的地方



美版msdn code(直接貼上)
<Grid.Resources>
<!-- Expense Report Data -->
<XmlDataProvider x:Key="ExpenseDataSource" XPath="Expenses">
    <x:XData>
        <Expenses xmlns="">
            <Person Name="Mike" Department="Legal">
                <Expense ExpenseType="Lunch" ExpenseAmount="50" />
                <Expense ExpenseType="Transportation" ExpenseAmount="50" />
            </Person>
            <Person Name="Lisa" Department="Marketing">
                <Expense ExpenseType="Document printing"
      ExpenseAmount="50"/>
                <Expense ExpenseType="Gift" ExpenseAmount="125" />
            </Person>
            <Person Name="John" Department="Engineering">
                <Expense ExpenseType="Magazine subscription" 
     ExpenseAmount="50"/>
                <Expense ExpenseType="New machine" ExpenseAmount="600" />
                <Expense ExpenseType="Software" ExpenseAmount="500" />
            </Person>
            <Person Name="Mary" Department="Finance">
                <Expense ExpenseType="Dinner" ExpenseAmount="100" />
            </Person>
        </Expenses>
    </x:XData>
</XmlDataProvider>
</Grid.Resources>
台灣英文版的msdn code(本來都沒換行...用notepad++整理了一下)
<Grid.Resources>
<!-- Expense Report Data -->
<XmlDataProvider x:Key="ExpenseDataSource" XPath="Expenses">
<x:XData>
<Expenses>
<Person Name="Mike" Department="Legal">
<Expense ExpenseType="Lunch" ExpenseAmount="50" />
<Expense ExpenseType="Transportation" ExpenseAmount="50" />
</Person>
<Person Name="Lisa" Department="Marketing">
<Expense ExpenseType="Document printing" ExpenseAmount="50"/>
<Expense ExpenseType="Gift" ExpenseAmount="125" />
</Person>
<Person Name="John" Department="Engineering">
<Expense ExpenseType="Magazine subscription" ExpenseAmount="50"/>
<Expense ExpenseType="New machine" ExpenseAmount="600" />
<Expense ExpenseType="Software" ExpenseAmount="500" />
</Person>
<Person Name="Mary" Department="Finance">
<Expense ExpenseType="Dinner" ExpenseAmount="100" />
</Person>
</Expenses>
</x:XData>
</XmlDataProvider>
</Grid.Resources>

2016年7月6日 星期三

wpf參數錯誤

剛開始玩wpf,照著msdn上的範例(這個台版範例超難看的...,請看美版範例)
因為我其中一個背景圖片的檔案名稱跟範例不同所以發現他一個奇怪的地方

2016年7月5日 星期二

ahk練習:task bar數字顯示

會有這個程式是為了配合好用的win快捷鍵win+{數字}
這個快捷鍵可以開啟數字所對應到的taskbar item

以上圖來說,win+1開啟chrome, win+2開啟evernote
但是如果使用習慣不好一次開了好幾個程式可能就不大好找了
ps. 同場加映熱鍵win+T可以輪流切換taskbar上的程式
win+shift+T可以逆向切換

2016年7月4日 星期一

滑鼠輔助器 mouseAux

不知道是不是因為我的滑鼠太爛,覺得滑鼠按鍵不是很好按
所以用ahk寫了一個程式可以用鍵盤的右Alt,Ctrl,Shift取代滑鼠的左鍵,左鍵兩下,右鍵
另外還順便測試了尋找滑鼠功能(把滑鼠移動到螢幕中心),對於螢幕很大或很多的人可能不錯用

windows.h in VC2005

VC2005要compile需要另外安裝平台開發套件才有windows.h可以用。如果在編譯VC2005專案時出現找不到windows.h可以參考本篇的解決方式。