スタンダード Visual C++

[表紙]スタンダード Visual C++

紙版発売

B5変形判/456ページ

定価3,058円(本体2,780円+税10%)

ISBN 4-7741-2042-1

ただいま弊社在庫はございません。

→学校・法人一括購入ご検討の皆様へ

書籍の概要

この本の概要

ドットネット環境ではプログラミング言語の違いによって,成果物としてのプログラムの機能・性能に差はなく,VC++.NETとVB.NETの違いは文法だけです。そのため,Windows上の高度な開発言語として,従来のVC++が再び注目されています。本書は,VC++の従来の方法である,MFCやWin32APIを使ったプログラム開発の入門書です。

こんな方におすすめ

  • VC++の方法である、MFCやWin32APIを使ってプログラム開発を行う方

目次

本書における注意点

はじめに

1 Visual C++でのアプリケーション開発

  • 1-1 Visual Studio .NET 2003の特徴
    • .NET Frameworkへの対応
    • ソリューション
    • 使い勝手の向上
  • 1-2 Visual Studio .NETが提供する開発ツール
    • 最も重要なウィンドウ群
    • ソリューション エクスプローラ... /リソース ビュー... /プロパティ ウィンドウ...
    • テキストエディタ
    • ワードラップ... /インクリメンタル検索... /[戻る]ボタン・[次に進む]ボタン... /コードのアウトライン表示... /クリップボードリング... /インテリセンス...
    • リソースエディタ
    • 多機能なヘルプ群
    • ダイナミックヘルプ... /キーワード検索...
  • 1-3 アプリケーション ウィザードを中心とするプログラム開発
    • 基本的なアプリケーション開発フロー
    • アプリケーション ウィザードの概要
    • アプリケーション ウィザードを使ってみる
    • リソースエディタを使ってみよう
    • リソースファイルの追加... /アイコンの編集... /プログラムからリソースへの参照...
  • 1-4 コーディングとプログラムの実行
    • コーディング(文字列の表示)
    • ビルドと実行
    • ビルド... /プログラムの実行...
  • 1-5 デバッグ
    • デバッグ(ブレークポイント)
    • ユーザ名の表示
    • 原因の究明

2 Windowsのプログラミングスタイル

  • 2-1 Windowsアプリケーション開発の歴史
    • MS-DOSからWindowsへ
    • Windowsオペレーティングシステム
    • アプリケーションインターフェイス
    • メモリ空間の拡大
    • 32ビット対応
    • プラットフォームの統一
  • 2-2 Windowsアプリケーションの2つの形式
    • Windowsアプリケーション
    • Windowsアプリケーション(ウィンドウを表示しない)... /コマンドプロンプトでのコンパイル...
    • コンソールアプリケーション
    • コマンドプロンプトありき...
  • 2-3 Windowsプログラミングの基礎
    • Windowsプログラミングで利用するデータ型
    • UNICODE
    • 自動的にANSIとUNICODEを変更する型宣言...
    • 変数の命名規則
    • 構造体の定義
    • 一般的な定義方法... /ポインタ型を含む場合...
    • 関数名の定義
    • ハンドル
  • 2-4 ウィンドウ制御の概論
    • イベント駆動
    • 擬似マルチタスク... /イベント駆動とその限界... /現在のWindowsシステムにおけるウィンドウ制御...
    • ウィンドウを表示するプログラム
    • ウィンドウを開くWindowsアプリケーションの作成...
  • 2-5 ウィンドウ制御の実践その1(基本)
    • アプリケーションウィザードでの作成
    • ヘッダーファイルのインクルードと既定値の定義
    • Windowsのメイン関数と変数の定義
    • WinMain関数... /変数の定義...
    • ウィンドウクラスの登録
    • ウィンドウの生成と表示
    • メッセージループ
    • メッセージループを構成するAPI... /アプリケーションの終了...
    • ウィンドウプロシージャ
    • メッセージクラッカ
  • 2-6 ウィンドウ制御の実践その2(リソースの追加)
    • リソースファイルの追加
    • ウィンドウへのメニューの追加
    • ウィンドウにメニューリソースを追加する... /メニューを作成する... /IDの変更... /“&”の秘密...
    • メニュー選択時の処理
    • メニュー選択時に処理が行われる... /リソースIDのありか... /ウィンドウクラスにメニューを設定する... /メニューの処理を追加する... /メニューID格納用ローカル変数の追加... /ID_QUITの処理... /ID_ABOUTの処理... /処理の実行...
    • アイコンの追加
    • アイコンを追加する... /アイコンの利用...
    • バージョン情報の追加
    • バージョンリソースを追加する...
  • 2-7 ウィンドウ制御の実践その3(デバイスコンテキストの操作)
    • WM_PAINTメッセージデバイスコンテキスト
    • WM_CHARメッセージ
    • 描画処理の追加(コーディング)
    • WM_PAINTの処理... /WM_CHARの処理...
    • デバイスコンテキストの概念

3 MFCプログラミング基本編

  • 3-1 MFC
    • 開発コード名はAFX
    • MFCの原型...
    • 基本構造
    • イベントハンドラとメッセージの関係
    • ウィンドウを開くアプリケーションのクラス構成
    • CWinApp... /CFrameWnd(CMDIFrameWnd)... /CViewとCDocument...
    • CWinAppクラス
  • 3-2 CWinAppクラスの動作を確かめる(実践)
    • プロジェクトの作成
    • コードの全容
    • MFCの利用者に見えている世界
    • 擬似コードのビルド・実行
    • コンストラクタ・デストラクタ
    • CConAppクラスの機能をCTestクラスの機能で置き換える処理... /new演算子でのインスタンス生成...
    • MFCアプリケーションにmain関数が存在しない理由
    • CWinAppの機能...
    • 仮想関数
  • 3-3 最も簡単なMFCアプリケーション作成
    • CFrameWndクラス
    • シングルドキュメントインターフェイス... /マルチプルドキュメントインターフェイス...
    • プロジェクト作成の基本
    • アプリケーションウィザードの作成... /バージョンマクロの定義とヘッダーファイルのインクルード...
    • MFCプログラミングの基本
    • メッセージマップ
    • ビルド・実行...
    • オブジェクト指向プログラミング
    • class CSimpleMfcApp : public CWinApp...
  • 3-4 メッセージ処理(イベント)
    • メッセージの追加
    • メッセージマップエントリ... /ハンドラ関数の宣言...
    • デバイスコンテキストの取得
    • OnPaintでデバイスコンテキストを取得する...
    • OnPaint以外のメッセージでデバイスコンテキストを取得する
    • タイマーイベント
    • ファイル名のドラッグアンドドロップ
  • 3-5 ドキュメント・ビューアーキテクチャ
    • ドキュメント・ビューアーキテクチャの目的
    • CDocumentクラス
    • ビューとの連携... /オブジェクト間の連携... /MVCモデルとドキュメント・ビューアーキテクチャ...
    • CViewクラス
    • フレームウィンドウの分離... /派生クラス...
  • 3-6 ドキュメント・ビューの実践
    • 作成するプロジェクト
    • 初期設定の変更
    • ドキュメントが管理する情報
    • ダイアログボックスの作成
    • MFC クラス ウィザード
    • オーバーライド
    • オーバーライドボタン...
    • 変数の定義
    • メンバー変数の追加ウィザード
    • DDXとDDV
    • ダイアログデータエクスチェンジ(DDX:Dialog Data eXchange)... /ダイアログデータバリデーション(DDV: Dialog data validation)...
  • 3-7 ファイルインターフェイスの実装
    • Webブラウザの表示
    • Webブラウザアプリケーション固有の新規作成処理
    • CDocument::OnNewDocumentのカスタマイズ... /アプリケーションを開いたとき... /メニューから[新規作成]を選択されたとき...
    • シリアライズ
    • Webブラウザの制御
    • Webブラウザが表示しているHTMLの保存
    • 操作メニューの追加
    • メニューの追加... /イベントの追加...
    • エラー発生時のメッセージボックス

4 MFCプログラミング上級編

  • 4-1 メールスロットの利用
    • メールスロット
    • メールスロットサーバー... /メールスロットクライアント... /メールスロットへのアクセス...
    • プロジェクトの概要
    • メールスロットプロジェクトの作成
    • ダイアログボックスのデザイン
    • メンバー変数の追加
    • コントロールのスタイル
    • ダイアログベースのアプリケーションの終了処理
    • クラスのメンバー変数の追加
    • ウィンドウの初期化
    • イベント処理の追加と実装
    • OnInitDialog関数で行う初期化処理... /OnDestroyで行う終了処理... /OnTimerで定期的に受信メッセージを取得する... /送信ボタンが押された際の処理...
  • 4-2 ソケットプログラミング その1(サーバー作成)
    • WinSock
    • ソケットはTCP/IPで通信を行う... /Windows用のソケット... /ソケットで通信するときの相手を特定する方法...
    • ソケットサーバーアプリケーションのプロジェクト作成
    • アプリケーション ウィザード...
    • 初期化処理と終了処理
    • WinSockを利用する際の初期化処理... /アプリケーション ウィザードが追加するソケットの初期化処理...
    • ダイアログボックスのデザイン
    • コントロールの配置... /メンバー変数の追加...
    • ソケットサーバー処理の手順
    • クライアントとの通信処理の作成
    • クラスの追加... /受信処理... /コンストラクタの処理... /クライアントからの接続処理...
    • クライアントからの接続待ち合わせ処理の作成
    • クラスの追加... /接続待ち合わせ... /コンストラクタの処理... /クライアントからの接続処理... /クラス宣言の入れ子問題...
    • ソケットの生成
    • CAsyncSocket::Create... /ソケット生成の組み込み... /Internet Explorerで接続してみる...
  • 4-3 ソケットプログラミング その2(クライアント作成)
    • コンソールアプリケーションでMFCを使う
    • プロジェクトの作成... /ヘッダーファイル... /CWinAppクラスのインスタンス生成とAfxWinInitによるMFCの初期化...
    • サーバーへの接続
    • CSocketクラスでのサーバーへの接続...
    • 通信処理
    • 終了処理...
  • 4-4 HTTPプログラミング 基本
    • HTTPとは
    • MFC WinInetクラスによるHTTPクライアント
    • プロジェクトの作成... /ダイアログボックスのデザイン... /メンバー変数の追加... /ヘッダーファイルのインクルード...
    • 接続までの処理
    • OnInitDialogで行う初期化処理... /リクエストを実行する処理... /ローカル変数... /URLの解析... /リクエストの動作フラグ... /インターネットインフォメーションサービス(IIS)... /CInternetSessionインスタンスの生成... /ボタン連打の無効... /Webサーバーへの接続処理... /例外処理...
    • リクエストの処理
    • リクエストの準備... /リクエストの実行... /リダイレクトの動作... /Locationヘッダーの動作...
    • 認証処理
    • 基本認証... /認証通過後のステータスコード... /情報の取得と表示...
    • 終了処理
    • 終了処理の記述... /エラー処理...
  • 4-5 HTTPプログラミング 応用(FTPクライアント作成)
    • FTPクライアントの作成
    • プロジェクトの作成... /ダイアログボックスのデザイン... /メンバー変数の追加... /ヘッダーファイルのインクルードとメンバー関数の追加...
    • 初期化処理
    • リクエストを実行する処理(値の取得)
    • エディットボックスの値の取得... /動作モードの取得... /PASVモード...
    • FTPサーバーへの接続
    • ディレクトリの移動...
    • ファイルの送受信
    • 送信:PUT... /受信:GET...
    • 例外処理をスローする
  • 4-6 ActiveXの利用
    • WinHTTP
    • オートメーションオブジェクト(AvtiveX)
    • ActiveX版WinHTTPを利用するアプリケーション作成
    • アプリケーション ウィザードにおける設定... /ダイアログのデザイン... /メンバー変数の追加...
    • 初期化処理
    • MFCアプリケーション ウィザードが追加するActiveXの初期化処理... /OnInitDialogで行う初期化処理...
    • Typelib クラス追加ウィザード
    • ヘッダーファイルがなくとも利用可能... /TypeLibからMFCクラスを自動生成する... /プログラミング...
    • WinHTTPでのHTTPリクエスト処理(OnBnClickedRequestの実装)
    • CreateDispatch...
    • VARIANT型の利用
    • TypeLib... /VARIANT型... /VARIANT型へのデータの設定... /Open関数とSend関数... /レスポンスボディの取得... /文字化け... /安全配列...
    • WinHTTPオブジェクトを利用するときの注意点
  • 4-7 マルチスレッドプログラミング
    • MFCアプリケーションでのスレッド
    • ユーザーインターフェイススレッド... /ワーカースレッド... /ワーカースレッドへの引数...
    • マルチスレッドアプリケーションでのプロジェクト作成
    • アプリケーション ウィザードにおける設定... /コーディング内容...
    • スレッドの引数に複数の変数を渡す
    • スレッドで生成される関数の中身...
    • 実行
    • デバイスコンテキストの解放
  • 4-8 DLLの作成
    • DLLにコードを分割する必要性
    • DLLのリンク
    • DLLの検索パス... /LoadLibrary..
    • DLLでAPIやクラスを公開する方法
    • __declspec(dllexport)の利用... /他の言語からの利用... /DEFファイルの利用...
    • Visual C++で作成できるDLL
    • MFCを利用しないDLLの作成
    • アプリケーション ウィザードにおける設定...
    • 標準 DLL
    • アプリケーション ウィザードにおける設定... /自動生成されたソースファイルの修正...
    • DLLを利用したアプリケーションの作成
    • アプリケーション ウィザードにおける設定... /ヘッダーファイルのコピー... /LIBファイルとDLLファイルのコピー... /プログラムの作成... /プロジェクトのビルド... /DLLTestアプリケーションの実行...
    • DLLのデバッグ
    • 必要なファイルのコピー... /デバッグ用アプリケーションの登録... /デバッグ実行...

5 Win32API

  • 5-1 マルチスレッドの同期処理
    • ファイルへのログ出力処理の作成(プロジェクトの作成)
    • アプリケーション ウィザードにおける設定...
    • ログ出力処理のクラス化のメリット
    • ログ出力処理を記述するファイル...
    • 同期オブジェクトとマルチスレッドプログラミング
    • 同期オブジェクト... /同期オブジェクトの種類...
    • マルチスレッドプログラミングで考慮しなければならないこと
    • その1 グローバル変数の利用は原則禁止... /その2 スレッドの領域はヒープから取得... /その3 同時に1つしか実行できない処理への対応... /その4 どのスレッドで出力されたログかの判別... /その5 処理がシリアライズされる,又はデッドロックする危険性...
    • クリティカルセクションの初期化
    • 定数...
    • ログ出力の動作
    • ログ出力開始(CLogFile::StartLog)... /ファイルオープン後の動作... /ログ出力停止(CLogFile::StopLog)...
    • ログに出力する書式を作成する
    • ログファイルへの書き込み
    • システムエラーメッセージ文字列の取得
    • エラーメッセージの取得... /ログの出力...
    • プログラムの実行
  • 5-2 アプリケーション間での通信
    • プロセス間の通信
    • メモリマップドファイル... /もっと簡単な方法はないのか?...
    • ウィンドウメッセージ
    • WM_COPYDATA...
    • パイプ
    • 名前なしパイプ... /名前付きパイプ...
    • 名前付きパイププログラミング(サーバー作成)
    • アプリケーション ウィザードにおける設定... /名前付きパイプの生成... /スレッドで名前付きパイプサーバーを実行... /スレッドの終了... /OVERLAPPED構造体... /処理スレッドの起動... /スレッド終了のチェック... /終了処理...
    • 名前付きパイププログラミング(クライアント作成)
    • アプリケーション ウィザードにおける設定... /CallNamedPipe...
    • 名前付きサーバー・クライアントシステムの実行
    • サーバーの実行... /クライアントの実行...
  • 5-3 実行が制限されているAPIの実行方法
    • 特権が必要なAPI
    • 特権を有効にするには
    • システムの再起動アプリケーションのプロジェクト作成
    • コーディングの手順
    • 再起動
    • メイン処理
  • 5-4 Win32サービス
    • サービスプロセス
    • ユーザーとの関係... /サービスの設定... /サービス制御マネージャ... /設定の保存...
    • サービスプログラミングのプロジェクト作成
    • サービスのインストール
    • サービスのインストール...
    • サービスの起動
    • インストーラーのプログラミング
    • サービスのメイン関数(第1段階)
    • サービスメインの処理(第2段階)
    • サービスの初期化(第3段階)
    • サービス開始(第4段階)
    • サービスの動作状態の制御
    • サービスのアンインストール
    • サービスの停止... /サービスの削除... /アンインストーラーのプログラミング...
    • テストサービスの実行
    • サービスの登録... /サービスの実行... /サービスの登録解除...
  • 5-5 ファイルの移動とディレクトリアクセス
    • ディレクトリへのアクセス
    • ディレクトリを作成するAPI... /ディレクトリを削除するAPI... /プロセスのカレントディレクトリを取得・設定するAPI...
    • ファイルのコピーと移動
    • ファイルをコピーするAPI... /ファイルを削除するAPI...
    • ディレクトリ名又はファイル名を変更・移動するAPI
    • ファイルを検索するAPI
    • 複数のファイルを検索するAPI
    • ファイルを検索するプログラム
    • ディレクトリのチェック... /ファイルの検索... /自分と親ディレクトリ... /再起呼び出し... /FindNextFile...
    • プログラムの実行
  • 5-6 ショートカットの作成
    • Win32APIからCOMオブジェクトを利用するには
    • ショートカットを作成するアプリケーション作成
    • インクルードファイル... /COMの初期化とオブジェクトの取得... /ショートカットが動作するために必要な情報の設定...
    • プログラムの実行
  • 5-7 特別なフォルダのパスを取得する
    • 特別なフォルダパス
    • プログラムの作成
    • アプリケーション ウィザードにおける設定... /インクルードファイル... /スペシャルフォルダのパスを取得する...
    • プログラムの実行
    • 長い関数とわかりやすさ

6 アプリケーションのデバッグ手法

  • 6-1 Visual Studio .NETのデバッグ機能
    • コンパイラ
    • ビルドオプション設定...
    • ビルド時間の短縮
    • プリコンパイル済みヘッダーの利用... /インクリメンタルリンク... /簡易リビルド... /ヘッダーファイルのインクルードガード... /デバッグ情報の生成...381
    • ビルド実行
    • 警告レベルの確認... /ビルドの実行...
  • 6-2 デバッグ情報の生成
    • デバッグの準備
    • MFC,ATL,Cランタイムのソース...
    • デバッグ情報
    • コンソールアプリケーションをデバッグするための設定
    • デバッグツールバー
  • 6-3 デバッグウィンドウ
    • 出力ウィンドウ
    • 自動変数ウィンドウ
    • ローカルウィンドウ
    • ウォッチウィンドウ
    • 呼び出し履歴ウィンドウ
    • ブレークポイントウィンドウ
    • タスク一覧ウィンドウ
  • 6-4 デバッグ用マクロ
    • アサーション
    • ASSERTマクロ... /VERIFYマクロ...
    • トレース
    • TRACEマクロ... /DEBUG_NEWマクロ...

7 アプリケーションの配布

  • 7-1 Windowsシステムの諸問題
    • レジストリの肥大化
    • モジュール更新 = 再起動
    • DLL地獄
  • 7-2 共有DLLのリンク方法
    • 静的リンク
    • 動的リンク
    • 共有DLLを利用したアプリケーションの配布
  • 7-3 アプリケーションが使う共有DLL
    • Depends.Exe
    • プロファイリング...
    • dumpbin.exe
    • dumpbin.exeの主なオプション
    • /HEADERS... //ALL... //DISASM... //DEPENDENTS... //IMPORTS... //EXPORTS...

8 .NET Frameworkへの対応

  • 8-1 .NET概要
    • .NET Framework
    • オペレーティングシステム...
  • 8-2 .NET Frameworkが解決するシステムの諸問題
    • INIファイルやレジストリからXMLへ
    • configファイルを参照するアプリケーション
    • アプリケーション ウィザードの設定...
    • レジストリに依存しないオブジェクト
    • アプリケーションの動作環境
    • .NET Framework上で動作するモジュール...
    • マネージコード
  • 8-3 複数のプログラミング言語を融和させるCLR
    • 名前空間
    • アプリケーションドメイン
  • 8-4 Visual C++ .NETへのステップアップ
    • Visual C++ .NETのメリット
    • すばやい移行... /既存のC++コンポーネントの利用... /マネージコードとアンマネージコードの混在...
    • マネージコードとアンマネージコードが混在するプログラム作成
    • データ型
    • 命名規則
    • マネージ拡張C++固有の記述
    • ソースファイルの文字コード... /インクルードファイル... /文字列定数の記述方法... /マネージ型によるメモリの管理...
    • 領域を確保するプログラムの作成
    • ボックス化
    • ボックス化を行うプログラムの作成
    • namespace
    • クラス
  • 8-5 Windowsフォーム
    • ウィンドウの形式
    • ウィンドウタイプのプログラム作成
    • 新アプリケーションフレームワーク(メイン関数の復活)
    • フォームデザイン
    • .NETの行く末