せっかくアドインを作成したのに、現場で適用したらメニューが追加されないという悲劇に。。
改めて見てみたら、ちゃんちゃらおかしいコードを書いていたので、修正して対応。
ついでに動作確認の方法もおかしかったので、正しく理解した。これでOKだろう。
修正内容:
・コマンドの取得ロジックを修正
・アサーションコードを修正
・VSS の「保留中のチェックイン」ウィンドウにも表示されたらいいなレベルのコードを追加
■最新版のダウンロードはこちら
主に開発記です。 調べたこと、試したことなどを記録しています。
せっかくアドインを作成したのに、現場で適用したらメニューが追加されないという悲劇に。。
改めて見てみたら、ちゃんちゃらおかしいコードを書いていたので、修正して対応。
ついでに動作確認の方法もおかしかったので、正しく理解した。これでOKだろう。
修正内容:
・コマンドの取得ロジックを修正
・アサーションコードを修正
・VSS の「保留中のチェックイン」ウィンドウにも表示されたらいいなレベルのコードを追加
■最新版のダウンロードはこちら
昨日、ちょろっと時間があったので、Visual Studio 2008 用のアドインを作ってみた。
最近は色々と手を出してしまっていて、作りかけのアプリがいくつかある。
それもやりたいのだけど、今の現場が「生産性の向上」というテーマに重きを置き、みんな高い意識レベルで仕事をしているので、負けていられない!というか。
自分も乗っていこう!という気持ちで 今回のアドイン製作にいたったのだ。
と言ってもまだ、ショボイ (><
これから積み重ねていきます。
ということで以下、田中アドインの説明。
■ファイル
■概要
Visual Studio 2008 用のアドインです。
ソリューションエクスプローラでファイルを選択したときのメニューに、下記2つの機能を追加します。
・選択したファイルの保存先フォルダを開く
・選択したファイルのフルパスをクリップボードにコピーする
■詳細( 同じ内容のものが、zip ファイルに ReadMe.rtf として入っている )
※ 以下の免責事項に同意できる方のみ、ご使用ください
[ 免責事項 ]
このアドインは、作者が個人的な用途のために製造したものです。
よって、このアドイン自体は誰が使用してもかまいませんが、それによって発生したいかなる損害において、作者は責任を負いません。
また、何の保証もしません。
-----------------------------------------
Ⅰ. 構成ファイル
· TanakaAddIn.dll
· TnakaAddIn.AddIn
Ⅱ. インストール方法
A. 標準インストール
1.「TanakaAddIn.dll」 を適当なフォルダに保存する ( どこでも良い )
2.「TanakaAddIn.AddIn」 をテキストエディタで開き、<Assembly> タグに「1.」で保存したフォルダを指定する
3.「TanakaAddIn.AddIn」 を下記のフォルダにコピーする ( なければ作成 )
コピー先フォルダ:「C:\Documents and Settings\All Users\Application Data\Microsoft\MSEnvShared\Addins」B. カスタム
・ 「TanakaAddIn.AddIn」のコピー先の変更方法
AddIn ファイルのインストール先は、標準で6箇所ぐらい用意されています。
そのうちどこへインストールしてもかまいません。
以下は、そのインストールフォルダの確認方法です。1.Visual Studio 2008 の メニューから、「ツール(T)」>「オプション(O)」>「環境」>「アドイン/マクロセキュリティ」を開く
2.「アドイン ファイル パス」を確認する
Ⅲ. アンインストール方法
インストールしたファイル「TanakaAddIn.dll」、「TanakaAddIn.AddIn」を削除してください。
-----------------------------------------
気が向いた方はどうぞ。
デバイスコンテキストについて
業務にて、デバイスコンテキストを使っての描画処理を担当。
描画関係の知識がなかったのでちょろっと勉強してみたので、メモを残しておく(たいしたことないけど 笑)。
Ⅰ. デバイスコンテキストとは
ウィンドウの描画に必要な材料のパッケージ。よく画用紙と画材のセットと表現される。
文字を書いたり、背景の色を変えたり、線を引いたり、画像を表示させたり・・・
といった全ての操作はこいつ(デバイスコンテキスト)のハンドルを取得するところから始まる。業務系アプリでは、画面のほぼ全てが MFC 標準のコントロールで事足りてしまうのであまり関わる機会がない。
が、色の変更などの細かい制御をするときは世話になるので、覚えておくと非常に便利だ。
Ⅱ. 画用紙と画材のセット・・・というと?
デバイスコンテキストが画用紙と画材のセットと表現される理由は何か。
それは、デバイスコンテキストが持っているオブジェクトを知れば納得がいく。
以下がデバイスコンテキストが持つオブジェクト・・・つまり画材のリスト ( 厳密にはこれだけではない ) 。
- Bitmap ・・・ 画像(画像を表示するときに使う)
- Brush ・・・ ブラシ(背景を塗りつぶすときに使う)
- Font ・・・ フォント(文字を書くときに使う)
- Pen ・・・ ペン(線を引くときに使う)
- Region ・・・ 領域(描画領域を限定するときに使う)
デバイスコンテキストは、これらの画材を全種類持っている。
ただし、もてる画材は1種類につき1つで、Pen なら Pen 1個。
つまり、赤ペンに青ペンに緑も・・のように、同じ種類の画材は複数持てないので入れ替えて使う。
また、1つのウィンドウにつき、デバイスコンテキストは1つである。
ということから、ウィンドウ、およびそれに張り付いている全てのコントロールもウィンドウなので、それぞれが1つづつデバイスコンテキストを持っていることになる。
Ⅲ. デバイスコンテキストの使い方
Ⅱ まででデバイスコンテキスト(以下 DC )の考え方が理解できたとうことで、実際にコードを書いてみる。
まずは、DC のハンドルを取得してから描画をおこなう一連の流れはこうだ。
- DC のハンドルを取得
- 画材を作成
- 画材を設定
- 描画
- 画材を元に戻す
- 画材を削除
- DC のハンドルを開放
すでにお気づきだと思うが、これにはいくつか注意点がある。
- DC のハンドルを取得したら、最後に必ず開放すること
- 使う画材を作成したら、最後に必ず削除すること
- 画材を入れ替えたら、最後にかならず元に戻すこと
以上の点に注意して、画面(画用紙)を赤で塗りつぶす処理を書くとこうなる。
--------------------------------------------------------------------------------
// ※ hWnd は、描画対象となるウィンドウのハンドル
//
// 画面を赤で塗りつぶす
//// DC のハンドルを取得
HDC hDC = ::GetDC( hWnd );// 赤のブラシを作成(画材を作成)
HGDIOBJ hBrushRed = ::CreateSolidBrush( RGB( 255, 0, 0 ) );// 赤のブラシを設定(画材を設定)
HGDIOBJ hBrushOld = ::SelectObject( hDC, hBrushRed );// 画面をぬりつぶす(描画)
RECT rtWindow;
::GetWindowRect( hWnd, &rtWindow );
::PatBlt( hDC, 0, 0, rtWindow.right, rtWindow.bottom, PATCOPY );// 画材を元に戻す
::SelectObject( hDC, hBrushOld );// 画材を削除
::DeleteObject( hBrushOld );// DC のハンドルを開放
::ReleaseDC( hWnd, hDC );
--------------------------------------------------------------------------------これで、画面を赤で塗りつぶすことができた。
やりたい描画、つまり使う画材によって呼び出す API が変わるが、
基本的な処理の流れは、どの画材を使うときも同じである。
( 逆に、それぐらいしか変わりがないとも言える )
Ⅳ. 最後に
今回は、GetDC を使って実装してみた。
GetDC は、ウィンドウハンドルのパラメータに NULL を設定すると、スクリーン全体の DC をも取得できる強力な API である。
画面のちょっとした描画にはもっと適した BeginPaint という API があるし、MFC のクラスを使うともっと簡単に実装できるので、
次回はそれらを使ったコードの書いてみることにする。
以上。
Visual Studio 2008 で開発をはじめたところ、Visual SourceSafe(以下VSS)のバインドに失敗していることに気がついた。マシンには以前、Visual Studio6、.NET2003、2005、2008が入っており、2003と2005はアンインストールされた状態であった。Visual Studio 2008 上では、ソース管理プラグインの初期化エラーが発生しソース管理へのバイントに失敗する。そして、環境設定からもプラグインに SourceSafe を指定することができずに「なし」と表示されてしまう・・という状況。ちなみに当然、VSS 6.0 はインストールされていた。。。
コマンドプロンプトから、「RegSvr32 ssscc.dll」を実行する。
どうやら、ssscc.dll が VSS のプラグインそのもので、通常はサービスに登録されているが、何かの拍子に(2003や2005のアンインストール時?)削除されてしまっていたようだ。
あと、VS2008 からの VSS6 使用は公式サポートされていない。また、VSS6 だと Unicode のソース管理に問題が発生する可能性がある様で、2005を使うのがベストらしい。
'
' 全てのシートを左上選択状態にする
'
Sub SelectA1AllSheets()
' 全シート分実行
Dim i As Integer
For i = 1 To Worksheets.Count
' シートをアクティブ化
Worksheets(i).Activate
' 左上にスクロール
Dim j As Integer
For j = 1 To Windows(1).Panes.Count
Windows(1).Panes(j).ScrollColumn = 1
Windows(1).Panes(j).ScrollRow = 1
Next
' 左上を選択
ActiveSheet.Cells(1,1).Select
Next
' 1番目のシートをアクティブ化
Worksheets(1).Activate
End Sub