メッセージ - みる会図書館


検索対象: Inside Visual C++
215件見つかりました。

1. Inside Visual C++

PART 3 ドキュメントーピューアーキテクチャ プログラムの終了時にドキュメントをダンプしない限り、 EX15A プログラムが正常に動作して ドキュメントの D ″襯力関数を呼び出すのにデストラクタを使用す いるかどうかがわからない。 る。これは CS 厩の扨ゆ関数を呼び出す。 &CEx15aDoc() CEx15aDoc : TRACE("Document object destroyed\n") ; #ifdef _DEBUG Dump(afxDump) ; #endif void CEx15aDoc : :Dump (CDumpContext& (c) const CDocument : : Dump(dc) ; dc くくくく m_student くく” \ Ⅱ " 12. ファイル EX15A ℃ PP を編集する。以下の文 #include " student . 五“ を、次の文の直前に追加する。 #include "ex15adoc . h" 13. EX 15A プロジェクトを編集して STU D ENT ℃ P P を追加する。プロジェクトに CS 厩の コードを追加することを、 VisuaI Workbench に知らせなければならない。 STUDENT. CPP のソースコードファイルを追加すると、 VisuaI Workbench はほかのプロジェクトファイルも 解析し、 STUDENT. H への依存性を調査する。 14. EX 15A アプリケーションをビルド、テストする。名前と成績をタイプし、 [ 入力 ] ボタンをク リックとアプリケーションが終了する。デバッグウインドウは以下のようなメッセージを表示す るか ? m_1Grade ー 75 name Sinofsky, Steve a CStudent at $42FC m—pDocTemp1ate = $41EE m bModified = 0 m strPathName m strTit1e = Ex15a a CEx15aDoc at $ 42D6 m 288 を付けてアプリケーションをコンパイルしなければならない。 注意これらのメッセージを見るためには、 [ デバッグ用 ] プロジェクトビルドオプション

2. Inside Visual C++

12 章メニューとキーポードアクセラレータ マッピングモードを使用するので、フォントサイズは適当なもので、ポイントとは関連がない。 int CMainFrame : : OnCreate (LPCREATESTRUCT 1pCreateStruct) TRACE(" ツールバーの作成に失敗しました \ Ⅱ " ) ; size0f(buttons)/sizeof(UINT))) ! m—wndTooIBar. SetButtons (buttons , ! m—wndTooIBar. LoadBitmap ( IDR_MAINFRAME) Ⅱ if ( ! m—wndTooIBar. Create (this) Ⅱ return ー 1 ; if (CFrameWnd : : OnCreate (1pCreateStruct) int 土 , ] ; char temp [ 10 ] ; ー 1 ー 1 5. 6. TRACE( " ステータスパーの作成に失敗しました \n") ; size0f(indicators)/sizeof(UINT))) ! m_wndStatusBar. SetIndicators (indicators , if ( ! m—wndStatusBar. Create (this) ー return ー 1 ; / / 作成に失敗した時、戻り値は return ー 1 ; / / 作成に失敗した時、戻り値は となります。 となります。 CMenu* pMenu = GetMenu( ) ; CMenu* pSubMenu = pMenu—>GetSubMenu(3) ; / / 既存のポップアップを削除 ( 単一項目と仮定 ) pSubMenu—>DeIeteMenu(O , MF—BYPOSITION) ; 土 0 て ( 土 = 0 ; 土く 8 ; 土 + + ) { / / ポップアップメニューの位置 12 + 土 * 2 ; / / サイズ 12 , 14 , 16 , 18 , 20 , 22 , 24 , 26 pSubMenu—>AppendMenu (MF—ENABLED ー MF—STRING , (UINT) IDM_SIZE_BASE + 土 , itoa(), temp, 10 ) ) ; return 0 ; 237 afx—msg BOOL OnCommandSize(UINT nID) ; protected: 襯〃〃 s た e 用の関数のプロトタイプを追加しなければならない。 EX12BVW. H ヘッダを編集する。 ClassWizard が行なわないので、 CE. ⅵ 2 わ怖 0 に 0 Co 襯 用のメッセージハンドラを追加する。 CIassWizard を使って CE. 2 わ防 0 クラスのメッセージハンドラを追加する。 WM_CREATE

3. Inside Visual C++

WM-CHAR ・ WM_CLOSE ・ ~ メッセージハンドラを使わない・ ・・ 28 , 90 ・・ 28 , 91 , 441 ・・ 615 ・・ 605 アイコン・ ~ リソースの ID ・ アイテム・・ ~ が選択されている場合・ ・・ 29 , 58 , 96 , 132 , 438 WM-COMMAND ・ ~ メッセージ用ハンドラ・ WM_COMMANDHELP ・ WM_COMMNOTIFY ・・ WM-CREATE ・ WM-CTLCOLOR ・ WM-DESTROY ・・ WM_ENTERIDLE ・ WM_HELPHITTEST ・・ WM_HSCROLL ・ WM_INITDIALOG ・・ WM_LBUTTONDOWN ・ WM_LBUTTONUP ・・ WM_MDICASCADE ・ WM_MDICREATE ・・ WM_MDITILE ・・ WM_MOUSEACTIVE ・ WM_MOUSEMOVE ・・ WM_NCDESTROY ・ WM_PAINT ・・ WM_PALETTECHANGED ・・ WM-QUERYENDSESSION ・ WM_QUERYNEWPALETTE ・・ WM_TIMER ・ WM_VSCROLL ・・ ・・ 405 , 408 , 425 , 431 ・・ 617 ・ 28 , 85 , 89 ・・ 549 ・・ 211 , 215 ・・ 405 , 425 , 431 ・・ 28 , 72 , 80 ・・ 135 ・・ 86 , 90 , 141 , 143 ・・ 74 ・・ 206 ・・ 457 ・・ 457 ・・ 80 ・・ 508 ・・ 342 ・・ 452 ・・ 342 ・・ 80 ~ のクリップポードへのコピー ~ の削除・ ~ のシリアライズ・・ ~ の描画・ ~ の表示工リアに何が表示されるか・ 複数の場合・ アイドル中の処理・・ アクセスキー アクセラレータ・ ~ テープノレ . アスペクト比・ 新しいウインドウを開く・ 新しいオプジェクトの作成と貼り付け・ 圧縮オプション・ アドバンスドインターフェイスオプション アドレス長・ アドレスフィールドの混成・ アプリケーションを起動するメカニズム・ ・・ 442 ・・ 514 ・・ 525 ・・ 525 ・・ 526 ・・ 526 ・・ 525 ・・ 520 ・・ 531 ・・ 211 ・・ 221 ・・ 320 ・・ 178 ・・ 178 ・・ 518 ・・ 455 ・・ 523 ・・ 104 ・・ 229 ・・ 58 ・・ 347 , 389 XLS フォーマット・ ・・ 57 , 542 アプリケーションを静的なクラスライプラリを使った ものから動的なライプラリを使うように切り換える WNDCLASS ・・ WndProc ・・ WORD ・ WordArt ・ WOW•・ wParam ・・ WriteFile ・ WriteHuge ・・ WritePrivateProfileString ・ WriteProfileInt ・ WriteProfiIeString ・ wsprintf ・ wysiwyg 印刷・ ア アーカイプの移植性・・ アーカイプからのロード・ アーカイブオプジェクト・ 632 ・・ 91 , 441 , 451 ・・ 86 , 90 , 141 ・・ 57 , 79 ・・ 154 , 614 ・・ 316 , 614 ・・ 615 ・・ 317 ・・ 314 ・・ 519 ・・ 411 ・・ 263 ・・ 262 ・・ 262 ・・ 262 ・・ 465 ・・ 614 ・・ 617 ・・ 528 アプリケーションオプジェクト・ ションオ冓 . 告 . ・ アプリケーションとの関連付け・ アプリケーションの基礎となる骨格・ アプリケーションの起動・ 42 , 46 アプリケー アプリケー ションフレームワーク . アプリケーションのシャットダウン・ 印刷情報構造体・ インクルードファイルの設定・ 色の反転・・ ~ のリスト・ 操作・・ イベント・ 一時変数へのポインタ・ 一時的な CMenu ポインタ・ イ ~ の組み込みメニュー項目・ ・・ 554 ・・ 320 ・・ 40 ・・ 339 ・・ 36 ・・ 45 ・・ 490 ・・ 28 , 31 , 38 , 39 , ・・ 225 ・・ 367 ・・ 555 ・・ 202 ・・ 163 ・・ 71 ・・ 163 ・・ 588 ・・ 233 印刷ジョブが何ページを必要とするのかがあらかしめわ からない場合・ 印刷ジョブの開始と終了・ 印刷ダイアログ・・ 印刷と OLE に必要な要素・・ ・・ 59 ・・ 363 , 368 ・・ 368 ・・ 367

4. Inside Visual C++

2 章 Microsoft 基本クラスライプラリアプリケーションフレームワーク 中のエントリを必要とする。 ClassWizard はクラスにメッセージハンドラを追加するのを手伝う。 リストボックスから Windows メッセージ ID を選べば、 ClassWizard は正しい関数パラメータと 返り値を持っコードを生成する。 0 ドキュメントとビュー 前述の例ではアプリケーションオプジェクトとフレームウインドウオプジェクトを使用した。し かしほとんどのクラスライプラリアプリケーションはもっと複雑になる。典型的には、これらはア プリケーションとフレームのクラスに加えて、「ドキュメント」と「ビュー」を表現するふたつのクラ スを収めたものになる。この「ドキュメントービューアーキテクチャ」は新しいものではない。もとは 1980 年代初期に研究レベルで考案され、そして 1985 年に Apple Computer により MacApp アプ リケーションフレームワーク製品として採用された。 単純にいえば、ドキュメントービューアーキテクチャは、ユーザーのデータへの視点 ( ビュー ) か ら、データを切り離すことである。明らかな利点のひとつは、同しデータに対する複数のビューの 存在である。ディスクに格納された株式相場表の月次価格から構成されるドキュメントを考えてみ る。データの表のビュー チャートのビューがあると想像しよう。ューザーが表のビューウインド ウを通して値を更新すれば、両方のウインドウは同じデータを表示している ( しかし異なるビューで ある ) ので、チャートのビューのウインドウも変更される。 クラスライプラリでは、ドキュメントとビューは C 十十のクラスとオプジェクトとして表現さ れる。 Figure2-1 は、 AT&T 、 IBM 、 GM の 3 つの会社に対応する CS 〃 0 じクラスの 3 つのオ プジェクトを示す。 3 つのドキュメントには表のビューが割り付けられ、その中のひとつのドキュ } 3 : 3 を、岸 、 5 4 5 リスト ウインドウ CStockList ビューオブジェクト C StockDoc オブジェクト "AT&T' CStockChart ビューオブジェクト ) 。 チャート ウインドウ C StockDoc オブジェクト ”旧 M “ リスト ウインドウ CStockList ビューオブジェクト , CStockList ビューオブジェクト C StockDoc オブジェクト "GM ” リスト ウインドウ Figure2-1 ドキュメントとビューの関係 47

5. Inside Visual C++

Microsoft Windows と VisuaI C 十十 Microsoft Windows の支持と、グラフィカルューザーインターフェイス (GUI) の優位性はすで に十分に本などに書かれている。本章では Windows プログラミングモデルを要約し、 Windows 用 のアプリケーション作成を容易にするために、 VisualC 十十の各要素がどのように協調して動作す るかを示す。その過程で Windows に関する新しい事柄を学ぶことになる。私たちは過去に留まる のではなく、将来を見ていくことにしよう。 Windows プログラミングモテル 使用する開発ツールに関係なく、 Windows プログラミングは、古いスタイルのバッチ、トランサ クション指向のプログラミングと異なっている。ます最初に、いくっかの Windows の基礎を知っ ておく必要がある。参考にする枠組みとして、よく知られている MS-DOS プログラミングモデル を使用する。読者がたとえ現在プレーンな MS-DOS のプログラミングを行なっていなくても、お そらくその構造はよく知っているだろう。 0 メッセージ処理 MS-DOS アプリケーションを C で書く場合、最低限必要なのは、襯〃と呼ばれる関数である。 ューザーがプログラムを実行すると、オペレーティングシステムは襯 4 切を呼び出し、それ以降、 ューザーは任意の希望するプログラミング構造を使用することができる。ューザーのキー入力、そ の他のオペレーティングシステムを使用するサービスをプログラムが必要とするならば、 ge なの ような適切な関数を呼ぶか、あるいは文字べースのウインドウライプラリを使用する。 Windows オペレーティングシステムがプログラムを起動するとき、ル M 〃関数が呼び出され る。ル慨 4 切はアプリケーションのどこかになければならす、そしてそれはいくつかの特定の作 業を実行する。もっとも重要な作業は、 Windows がアプリケーションに送るメッセージを処理する 独自のコードを持つ、アプリケーションの「メインウインドウ」を作成することである。 Windows 用に書かれたプログラムと MS ー DOS 用に書かれたプログラムの基本的な違いは、 MS-DOS プログ ラムではユーザー入力を取得するためにオペレーティングシステムを呼び出すのに対し、 Windows 27

6. Inside Visual C++

PART 2 クラスライプラリピュークラス CRect(50, 175 , 180 , 208 ) , this, 1 ) ; pCntr—>SetNumProperty("DigitsLeft" , 3 ) ; pCntr—>SetNumProperty( "DigitsRight" , 2 ) ; pCntr—>SetF10atProperty("Va1ue" , 123.45 ) ; return 0 ; この関数は、アプリケーションオプジェクトに埋め込まれた C レ召 Co 厩 / オプジェクトのため の CNTR コントロールウインドウを実際に作成する。 CÆ防夜 0 の 0 〃ん召″加〃 Do れ切メッセージハンドリング関数のコードを書く。最初に EXIIC VW ℃ PP 中で、メッセージを表示するように 0 D 仮想関数を編集する。 void CEx11cView: : OnDraw(CDC* pDC) pDC—>TextOut ( 0 , 0 , "Press the left mouse button here. “ ) ; 次に CIassWizard が生成した骨格を見つけ、以下に示すようにコードを追加する。 void CExIIcView : : OnLButtonDown(UINT nFIags , CPoint point) CExIIcDia10g dlg; d1g. DOM0daI ( ) ; この関数はもうひとつの CNTR コントロールを収めるダイアログを起動する。 EXIICVW ℃ PP で作業している間に、以下の # じ虎文を追加する。 #include “ exllcdlg ・” 7. App Studi0 を使ってダイアログを作成する。 212 ページに示したダイアログをモーダルで使 用する。デフォルト ID の IDD_DIALOGI を受理する。最初に Visual Basic コントロール CNTR. VBX がインストールされていることを確認する ( これを行なうには、 AppStudio の [ ファイル ] メニューから [ コントロールの組み込み ] を選択する ) 。 CNTR の位置を決め、次にその 上をダブルクリックし、 <Counter プロバティ > ダイアログを表示させる。こで [DigitRight] プロバティを 2 に設定する。 ID は IDC_ COUNTERI 。完了したら変更を保管する。 8. CIassWizard を使って CExIIcDiaIog クラスを作成する。 App Studio の [ リソース ] メニュー から [CIassWizard] を選択する。 以下に示すように < クラスの追加 > ダイアログを埋める。 6. 214

7. Inside Visual C++

PART 3 ドキュメント - ピューアーキテクチャ pDC—>Rectang1e (m—rect ) ; pDC—>SeIectStockObject (WHITE—BRUSH) ; / / プラシが選択されていれば選択解除する 0 〃 D 耀 0 関数はコマンドメッセージ ON-DRAW-CIRCLE をハンドルし、 0 〃 D 耀ル S 翹尾 関数はコマンドメッセージ ON-DRAW-SQUARE をハンドルする。これらふたつの関数は描 画矩形を右下に移動し、そして次にその矩形を無効化するするので、 0 〃耀肥にその再描画を 引き起こさせる。この無効化の方法の効果により、四角形と円が斜めに交互に並ぶ。 void CEx13aView: : OnDrawCirc1e() m_bCirc1e = TRUE; m—rect + = CP0int(25, 25 ) ; InvaIidateRect (m—rect ) ; void CEx13aView : : OnDrawSquare() m_bCirc1e = FALSE; m—rect + = CP0int ( 25 , 25 ) ; InvaIidateRect (m-rect) ; ネープル / ディスエープルする。同時にただひとつの項目がイネープルされている。 void CEx13aView: : OnUpdateDrawCirc1e (CCmdUI* pCmdUl) pCmdUI—>EnabIe ( !m—bCirc1e) ; 以下のふたつの更新コマンド関数は [ 円 ] 、 [ 四角形 ] ボタンと対応するメニュー項目を交互にイ void CEx13aView : : OnUpdateDrawSquare (CCmdUI* pCmdUl) pCmdUI—>Enab1e (m—bCircIe) ; 0 〃 D Pa 川関数は襯ーわ Pa 川フラグの状態を切り換える。これはまたボタンの特性のリ ストをダンプするために、ツールバーオプジェクトにアクセスする。 void CEx13aView: : OnDrawPattern() UINT id, style ; int れ Count , i , mage ; m_bPattern = m_bPattern / / 全ツールバーボタンの属性をリストアップするコード / / GetParentFrame は SDI アプリケーションでしか有効でない 250

8. Inside Visual C++

12 章 return TRUE; / / 以上 以下に関数のプロトタイプを示す。 afx—msg BOOL OnZoom(UINT nID) ; 例 EX12B ューとキーポードアクセラレータ この例は CE ″怖 e 肥クラスを使っているが、ちょっとひねっている。新しいトップレベルメニュー 235 クト ] メニューから [ AppWizard ] を選択する。オプションとデフォルトクラス名は以下の通り。 1. AppWizard を実行して *VCPP*EX12B*EX12B を制作する。 VisualWorkbench の [ プロジェ 以下は例 EX12B の作成ステップである。 しかしながら、拡張コマンドの拒絶機構の使用に関しては注意を払っていない。 クラスに送ることは、アプリケーションフレームワークのコマンドルーティングに依存している。 プアップを C 財〃の中に作成しなければならない。結果のコマンドメッセージを CE. ⅵ 2 ろ防 e メニューは常にアプリケーションのフレームウインドウに関連付けられているので、フォントのポッ ニューコマンドの使い方を示している。 C の / og を使うことになる。 EX12B は理想的なフォント選択テクニックではなく、メ 注意フォントとサイズの選択を本式に行なうのであれば、たぶん CO 財 MD. ん G クラスの Figure12-5 使用中の EX12A プログラム 24 This is text in size 22 カイル旧編集旧表示Ⅳ ) ヘル丿。 ( 旦 ) プログラムを示す。 バ関数にルーティングするために拡張コマンドマクロを使用する。 Figure12 ー 5 は使用中の EX12B っ [ サイズ ] ポップアップを動的に作成し、そして 8 つの異なるコマンドメッセージをひとつのメン リソース中でハードコーディングすることもできるが、その代わりに、 8 つのフォントサイズを持 項目は、編集ウインドウのフォントのサイズ変更をユーザーに許している。サイズ選択をメニュー = 藩おをブサケシン一第新を 300

9. Inside Visual C++

PART 4 上級的なトピックス 準コマンドメッセージを送り、そしてこれらは更新コマンドメッセージによりディスエープルする ことができる。ほとんどのダイアログバーはフレームウインドウの上部、ツールバーのすぐ下に置 かれる。 アプリケーションへのダイアログバーの追加は驚くほど簡単である。新しい派生クラスすら必要 ない。以下はそのステップである。 1. 2. 3. AppStudio を使ってダイアログを配置する。以下のスタイルを適用する。 [ スタイル ] = チャイルド [ 境界 ] = なし [ 可視 ] = チェックなし フレームの上部、下部に置く水平方向のバーにするか、あるいは左か右に置く垂直方向のバーに するかを選択できる。ボタンやエディットコントロールを含む任意のコントロールを追加する。 派生メインフレームクラス宣言中で以下のように、埋め込まれた CD / 〃 / og. 召オプジェクトを return ー 1 ; TRACEC'FaiIed to create query baryn") ; if ( !m—wndMyBar. Create (this , 工 DD—MY—BAR, CBRS—TOP , IDD—MY—BAR) ) メインフレームクラスの 0 C 4 メンバ関数中に、ダイアログバーの生成コードを追加する。 CDia10gBar m—wndMyBar ; 言する。 レームワークに知らせる。 スタイルは、ダイアログバーがフレームウインドウの上部に置かれることをアプリケーションフ /DDーM丘召ス沢は AppStudio 内で割り当てられたダイアログリソース ID である。 C. 召 S. ー TO. アプリケーションのシャットダウン こまでアプリケーションのシャットダウン処理に関してあまり言及してこなかった。通常のド キュメント指向のクラスライプラリアプリケーションでは、 CDO 襯 e 厩の S 0 e F g 関数 の呼び出しが、アプリケーションフレームワークがドキュメントをセープするかどうかをユーサー に問い合わせることを保証した。しかし ODBC では、プログラムを終了する前に接続を終了し、 ンドルを解放することに注意を払うことになる。 アプリケーションフレームワークは、アプリケーションを終了しようというューサーの試みをト ラップする方法を提供する。これは C の 0 襯召厩の仮想メンバ関数立怩財を介して、すべ 490

10. Inside Visual C++

21 章実践的な Windows べースのアプリケー / / 部材がビューの外に出ていたら、 ここで元に戻す long length = (LONG) (m-pPiece->m-1ength / .24 10ng vidth = (LONG) (m—pPiece—>m—vidth / . 24 ) ; m—pPiece—>m—y = —m-tota1Log ・ cy + 臂土 dt 五 ; (m—pPiece—>m—y ー土 dt 五く—m—t0ta1Log ・ (x) { m—pPiece—>m—y = 0 ; 辷 ((m-pPiece->m-y > = 0 ) ) { m—pPiece—>m—x = m—t0ta1Log ・ cx ー length; (m—pPiece—>m—x + length > m—t0ta1Log ・ (x) { m—pPiece—>m—x = 0 ; 辷 ((m-pPiece->m-x く = 0 ) ) { if if 0 OnLButtonDblClk pDoc—>UpdateAIIVievs (this) , pDoc—>SetModifiedF1ag() ; ShovOver1ap() ; m—bCaptured = FALSE ; Re1easeCapture ( ) ; ・ / / 自らを除く ン・ヨン これはいわゆるテトリス関数である。ューザーが部材上でダブルクリックすると、部材は板材の 左上隅に落ちていく。左上隅が占められている場合は、選択された部材は使用可能なもっとも近い 0 OnCommandHeIp 、 OnHeIpHitTest このメッセージハンドラはキーポードによるビューのスクロールを実装する。 0 OnKeyDown 位置に落ちていく。 431 return HID—BASE_RESOURCE + IDR_PLANVIEW; (int) HIWORD ( IP ) , (int) LOWORD(1Param) ) ; TRACE("Mouse position = (%d, %d)\n" LRESULT CP1anViev : : OnHe1pHitTest (WPARAM Pa て , LPARAM 1Pa て ) タはカーソル位置をデバイス座標で収めている。 するので、プランビュー用の状況依存のヘルプが実装される。 0 〃〃 e ゆ〃″の〃襯パラメー これらふたつの関数は WM-COMMANDHELP と WM-HELPHITTEST メッセージを処理