Visual Studio 2005, 2010 の覚え書き

初版作成  2013?
最終更新  2017.09.05


◆◆ 実行 ◆◆

コンソールアプリケーションの実行が終了すると、コンソールが
消えてしまう。

エラーメッセージを見るために、残したいときは F5 ではなく
ctrl + F5 で実行する。

終了は、コンソールで ctrl + C


◆◆ プログラミングの環境 ◆◆

デフォルトではエラー出力ウィンドウはドッキングされているので、
切り離して右側に置いた方が見やすい。

エディタの色使いは変更して黒背景にした方が絶対によい。
私の色使いは

define, void int while など 赤
コメント           黄色
文字列            水色


◆◆ stack overflow ◆◆

「プロジェクト」→「プロパティ」
「構成プロパティ」→「リンカー」→「システム」
スタックサイズの設定  10000000  (10M) デフォルトは 1M


◆◆ 新しいファイルの追加 2013.1.9 ◆◆

1. ファイルの作成

「ファイル」→「新規作成」→「ファイル」→「Visual C++」
で作成し
「名前を付けて保存」

2. プロジェクトに追加

「ソースファイル で右クリック」→「追加」→「既存の項目」


◆◆ デフォルトのインクルードディレクトリなどを固定化する 2013.1.8 ◆◆

空のソリューションを作る

「ツール」→「設定」→「上級者用の設定」

「表示」→「プロパティマネージャー」
Debug | Win32  Microsoft.Cpp.Win32.user あるいは
Release | Win32  Microsoft.Cpp.Win32.user をダブルクリック

「共通プロパティ」→「VC++ディレクトリ」→「インクルードディレクトリ」に
追加のインクルードディレクトリを設定。

ライブラリのディレクトリは #pragma の後のライブラリ名をフルパスで書けばよい


◆◆ フォームの編集方法 ◆◆

ウィンドウ左側の領域の一番下のタブにおいて「リソースビュー」を選ぶ。


◆◆ コントロールを削除したとき ◆◆

以下の場所の記述を手動で削除する必要がある。

xxxView.h      イベントの記述
xxxView.cpp    BEGIN_MESSAGE_MAP
               イベントハンドラ関数


◆◆ 線の描画 ◆◆

デバイスコンテキストに対して行う。

デバイスコンテキストの原始的な使い方

void CabcView::OnDraw(CDC* pDC)
{
    CPen myPen, *oldPen;

    myPen.CreatePen(PS_SOLID,2,RGB(0,0,0));
    oldPen = pDC->SelectObject(&myPen);

    pDC->MoveTo(x1,y1);
    pDC->LineTo(x2,y2);

    pDC->SelectObject(oldPen);
}

コントロール変数を定義してない場合

    CWnd* myPICT = GetDlgItem(IDC_PICT);
    CClientDC myPictDC(myPICT);

m_pict というコントロール変数を定義している場合

    CClientDC myPictDC(&m_pict);

上のように描きたい領域のデバイスコンテキストを取得してから

    myPictDC.MoveTo(x1,y1);
    myPictDC.LineTo(x1,y1);

ピクチャボックスのクリア(コントロール変数あり)

    CRect myRECT;
    m_pict.GetClientRect(myRECT);       自分の領域を取得

    myPictDC.FillSolidRect(myRECT, RGB(255,255,255)); 白で塗りつぶす

◆◆ 画像の描画 ◆◆

1. BITMAP オブジェクトに LoadBitmap でビットマップを読み込んでおく
2. CreateCompatibleDC で互換性のあるメモリデバイスコンテキストを作成
3. SelectObject でその DC にビットマップを描画する
4. BitBlt または StretchBlt 関数で、コピーする

直接デバイスコンテキストに Bitmap を描画することは出来ない


OnDraw のように pDC が引数として来るとき

    CDC workDC;
    workDC.CeateComptibleDC(pDC);

    pDC->BitBlt(10,10,256,192,&workDC,0,0,SRCCOPY);

pDC が来ないとき

     CDC *pDC;
       (描画)
     m_pict.ReleaseDC(pDC);


◆◆ OpenCV の使い方 Visual C++ 2010 用 ◆◆

◆ path の設定

d:\opencv\build\vc10\bin

この中に dll があるので、path が通っていないと dll をロードできない。
path の設定は Visual Studio を起動する前に行っておかなければならない。

◆ Visual Studio としての(インクルード・ライブラリ)フォルダの設定

参照 OpenCV2 プログラミングブック p.21

ツール → 設定 → 上級者用の設定

表示 → プロパティマネージャー

Debug Release どちらでもよいので Microsoft.Cpp.Win32.user をダブルクリック

共通プロパティ → VC++ディレクトリ

インクルードディレクトリ   d:\opencv\build\include
ライブラリディレクトリ     d:\opencv\build\vc10\lib


◆ 個別のプロジェクト毎の(インクルード・ライブラリ)フォルダの設定

プロジェクト → プロパティ → 構成プロパティ →

C/C++ → 追加のインクルードディレクトリ
VC++ ディレクトリ → ライブラリディレクトリ

◆ ライブラリ名の指定

#include <opencv2/opencv.hpp>

#pragma comment(lib,"opencv_core243d.lib")
#pragma comment(lib,"opencv_imgproc243d.lib")
#pragma comment(lib,"opencv_highgui243d.lib")
#pragma comment(lib,"opencv_video243d.lib")
#pragma comment(lib,"opencv_objdetect243d.lib")
#pragma comment(lib,"opencv_legacy243d.lib")
#pragma comment(lib,"opencv_calib3d243d.lib")
#pragma comment(lib,"opencv_contrib243d.lib")
#pragma comment(lib,"opencv_features2d243d.lib")
#pragma comment(lib,"opencv_flann243d.lib")
#pragma comment(lib,"opencv_haartraining_engined.lib")
#pragma comment(lib,"opencv_ml243d.lib")
#pragma comment(lib,"opencv_gpu243d.lib")

◆ Win32 コンソールアプリケーションを作成する

雛形では _mail() となっているが、コメントアウトして OpenCV のサンプルコードを持ってくると、main() から始まるプログラムはエラー無くコンパイルを終了する。

まずは、lkdemo を実行する。lkdemo は OpenCV\samples の中にある。


◆◆ ネットワーク通信のプログラム ◆◆

プロジェクト --- プロパティ --- 構成プロパティ --- リンカ
--- 入力 --- 追加の依存ファイル: wsock32.lib

◆◆ sprintf, TextOut など従来の文字の扱いをする ◆◆

プロジェクト --- プロパティ --- 構成プロパティ --- 全般
--- 文字セット: マルチバイト

◆◆ dll を使わない ◆◆

プロジェクト --- プロパティ --- 構成プロパティ --- C/C++
--- コード生成 --- ランタイムライブラリ: マルチスレッド デバッグ

◆◆ cwd ◆◆

Visual Studio から実行: ProjectName\ProjectName
ショートカットから実行: ProjectName\Debug


◆◆ sprintf などの warning を表示しない ◆◆

#pragma warning(disable:4996)