タグ

VC++に関するzetamattaのブックマーク (16)

  • Using the CCheckListBox and Getting Check State Notification

    Download source - 12.4 KB Introduction I like the CCheckListBox class provided with MFC, however, its use isn’t obvious and the wizard assistance stops at the CListBox class. I’ll describe how to insert it easily in your project. (There may be easier ways to do it, but this is how I do it and it works.) I’ll also show how you can add event notification so that you can find out when the check box s

    zetamatta
    zetamatta 2019/10/17
    CCheckListBox の使い方
  • VC OnInitDialog で、コントロールにSetFocus()できない | zoro0nine

    zetamatta
    zetamatta 2019/10/16
    OnInitDialog ではフォーカスをコントロールに設定する時、return FALSE しないいけないだと…。はまっていたので、たすかりました。ありがとうございます。
  • ATL::CPathユーティリティ - syghの新フラグメント置き場

    (これは2010-10-31に書いた故OCNブログの記事を移植したものです) Visual C++ 付属の ATL にはわりと便利なユーティリティ クラスがあるんですが、あまり知られてないのでひとつ紹介します。 CPathT Class | Microsoft Docs ATL::CPath は Windows Shell API の Path*関数を薄くラップしたクラスなんですが、ATL::CString とともに Windows アプリでは重宝するかと。 atlpath.h をインクルードすれば、非 ATL/MFC プロジェクトであっても使えるようになります。 #include <atlpath.h> void AtlPathTest() { const LPCWSTR pAnswerStr[] = { L"No", L"Yes" }; { const CPathW paths[] =

    ATL::CPathユーティリティ - syghの新フラグメント置き場
    zetamatta
    zetamatta 2019/04/01
    CString はかなり最適化されており高速で便利。ただし、MFC/ATLは有償なので、std::wstring も使えた方がよい
  • Visual Studio 2010 C++ の “VC++ ディレクトリ” 設定はどこへ?

    きっと誰もがハマるであろうと思うので、書いておきます。ワタシもハマりました。 多くの方がきっとブログのネタにしているでしょう。 これです。ディクレトリの設定がない…どこへ行ってしまったのでしょう。 ヘルプ見てもいまいちわからないですよね。で、調べました。 VS2010 からは、個別のプロジェクト単位で、ディレクトリ設定を行うように変更になったとのこと。 確かに、プロジェクトのプロパティにはあります。 でも、共通のテンプレートを使おうと思ったり、別のフレームワーク用のテンプレートを使おうと思ったら いちいち、個別プロジェクトで設定していられないです。それに面倒。 ワタシの大好きな WTL もその一つです。 では、どうするのかというと、この部分がファイルに分離されているので、ファイルに記述することに なるんだそうだ。 ファイルの場所 C:\Users\<ユーザー名>\Local Setting

    Visual Studio 2010 C++ の “VC++ ディレクトリ” 設定はどこへ?
  • スレッドの同期

    クリティカルセクション マルチスレッドプログラミングは、プログラムの全体の分野でも高度な手法です プログラムをする上で、当に必要な場合を除けば使うことを避けるべきでもあります 同じことを、タイマーで実現できるのならば、タイマーを使うべきであるとも言えます なぜ、スレッドは高度で危険を含むのか それは、同じ記憶領域を複数のプログラム(スレッド)が操作するからです 一つのグローバル変数を、二つのスレッドが同時に参照することを考えてください お互い、この変数を書き換えたり読み込んだりして、重要な処理を行う時 正しい順番で読み書きが行われなかったとき、プログラムの整合性は失われます #include <windows.h> int iCount; DWORD WINAPI ThreadFunc1(LPVOID hWnd) { HDC hdc; TCHAR str[32]; for (iCount

    zetamatta
    zetamatta 2015/07/28
    「クリティカルセクション」- Mutex との違いはプロセス間で使えないくらいなのかな?
  • ミューテックスによる2重起動防止の罠 - Dive to the Software

    Windowsでプロセスの二重起動の防止にはミューテックスが使われます。 サンプルなどをみると簡単なのですが、意外とハマる罠があるので注意しましょう。 ちなみに以下のサンプルコードはVC2008で試しています。 罠1:OpenMutexしてはいけない #include <windows.h> #include <tchar.h> #include <stdio.h> #include <locale.h> //_tsetlocale用 #include <conio.h> //getch用 int _tmain(int argc, _TCHAR* argv[]) { _tsetlocale( LC_ALL, _T("Japanese") ); //_tprintfで日語を表示させるために必要 HANDLE hMutex = ::OpenMutex(MUTEX_ALL_ACCESS, FA

    ミューテックスによる2重起動防止の罠 - Dive to the Software
  • 実行ファイルのサイズを小さくする

    TClockでは、「デフォルトライブラリ(ランタイムライブラリ)をリンクしないことによって、実行ファイルのサイズを小さくする」というテクニックを使っています。TClock LightのMakefileやソースの#ifdefで何やってるのか詳しく知りたいときは、このページの情報を参照してください。 このテクニックは、「実行ファイルが小さいほうが気持ちいい」という作者の単なる好みによるもので、ふつうのC言語でふつうにプログラムする際には、役に立たない、覚えなくてよいものです。 TClock Lightのソースを改良したい人は、Makefileを編集して、デフォルトライブラリをリンクする設定に変えることをお勧めします。TClock LightのMakefileは、デフォルトライブラリをリンクするかどうかを、簡単に切り替えられるようにしてあります。 Visual C++では、次の行を削除します。

  • Registration-Free COM で簡単 COM テスト - ライ麦畑をさがして

    Windows XP 以降には「Registration-Free COM」というのがあって、COM コンポーネントを side-by-side アセンブリにすることで、レジストリに登録しなくてもインスタンス化することができる。ちょっと COM のテストがしたくて使ってみたのでメモしとく。 コンポーネントの作成 まず、Visual Studio を使って COM コンポーネントを作る。API を直接叩くのは大変なので ATL にする。適当にクラスを作って、適当にメソッドを追加する。 クラスができたら、プロジェクトのプロパティを開く。[リンカー]-[全般] から [出力の登録] を [いいえ] にする。 [ビルド イベント]-[ビルド後イベント] の設定で、side-by-side アセンブリとして認識させるためのマニフェスト ファイルを作成するコマンドを指定する。 mt -tlb:"$(T

    Registration-Free COM で簡単 COM テスト - ライ麦畑をさがして
    zetamatta
    zetamatta 2015/06/12
    レジストリ登録なしに COM を使うための術
  • VC++の文字列型のまとめ

    URL:http://www1.odn.ne.jp/~aaa10090/zaregoto/deb/d050218j.htm このTIPSが3年前くらいにあったら、私自身助かったのですが・・・。 毎回ヘッダファイルを調べたりするので、まとめておきます。 Javaの場合 Javaはすっきりしていて、 java.lang.String java.lang.StringBuffer char[] byte[] くらいじゃないでしょうか。 エンコードを気にしなくてよいのならば、上の2つで用は足ります(たぶん)。 Cの場合 純粋なC言語では、 char * unsigned char * になります(たぶん)。 日語(MBCS)を扱う場合に、unsignedにするか、キャストしないとよく泣かされます。 C++の場合 純粋なC++言語では、 char *, unsigned char * const

    zetamatta
    zetamatta 2015/06/10
    BSTRを直接使わんでも、CComBSTR という便利なラッパーが標準装備されていたのかー。早く言ってよー
  • モードレスダイアログの作り方 - bnote

    MSDNより 必ず OnCancel メンバ関数をオーバーライドし、その中から DestroyWindow を呼び出す。 基クラスの CDialog::OnCancel を呼び出さない。 この関数はEndDialogを呼び出すため、ダイアログボックスは破棄されず、非表示になるだけです。モードレス ダイアログ ボックスは通常 new を使って割り当てられるため、this を消去するようにモードレスダイアログのPostNcDestroyもオーバーライドする。 CDialogから派生したモードレスダイアログ用のクラスを作成します。 OnCancelをオーバーライドし、DestroyWindowを呼び出すよう追加します。 void C***Dlg::OnCancel() { DestroyWindow(); //CDialog::OnCancel(); } PostNcDestroyをオーバーラ

  • Enterキー(Escキー)を押しても、ダイアログが閉じないようにするには

    解説 ダイアログは、EnterキーおよびEscキーを押すと、ダイアログが閉じるようになっています。 なぜこのような動作をするのかというと、CDialogの実装として、 「Enterキーを押すと、標準のボタン(通常はOKボタン)を押した動作」 「Escキーを押すと、Cancelボタンを押した動作」 をするように実装されており、さらに 「OKボタンを押したときには、ダイアログを閉じる」 「Cancelボタンを押したときには、ダイアログを閉じる」 ように実装されているためです。 EnterキーおよびEscキーを押しても、ダイアログが閉じないようにするには、 ダイアログのクラスのPreTranslateMessage関数で、VK_RETURN、VK_ESCAPEをキャッチし、CDialogの実装の処理が行なわれないようにします。 サンプルコード BOOL CXXXDialog::PreTransl

    zetamatta
    zetamatta 2014/12/18
    >CDialogの実装として、「Enterキーを押すと、標準のボタン(通常はOKボタン)を押した動作」「Escキーを押すと、Cancelボタンを押した動作」をするように実装されており
  • 検索と置き換え

    zetamatta
    zetamatta 2014/12/17
    VC++ の標準検索ダイアログ FindText の使い方
  • STLコンテナ&MFCコレクション

    概要 コレクションクラス(非テンプレート) コレクションクラス(テンプレート) CArrayクラス要素数の拡張 要素に自前クラスを使う場合 CListクラスを使ったデータ構造例 CList全件アクセスサンプル STLコンテナの使い方 STLコンテナの種類 STL map C47867 ワーニング STL map sample 概要 どちらも他の複数のオブジェクトを格納できるオブジェクト(さまざまなデータ構造をもつ配列) STLコンテナ イテレータという一種のポインタでデータへのアクセスをすることができる。 テンプレートとして定義されていてタイプセーフ。コンテナの消滅時にはその各要素にその型のデストラクタが起動される。ロジック上後始末処理を記述しなくてよい。(デストラクタが定義されていればよい) イテレータで個々の要素にアクセスしていれば、コンテナの種類を切り替えるの

    STLコンテナ&MFCコレクション
    zetamatta
    zetamatta 2014/12/09
    あ、これ、分かりやすいな
  • Visual C++ - Visual Studio 2010 の C++ と MFC での新機能の詳細

    このブラウザーはサポートされなくなりました。 Microsoft Edge にアップグレードすると、最新の機能、セキュリティ更新プログラム、およびテクニカル サポートを利用できます。 Visual Studio 2010 での C++ と MFC の新機能の詳細 Sumit Kumar Visual Studio 2010 は、C++ の開発者に大きなメリットをもたらします。Windows 7 で提供される新機能を利用する機能から、大規模コード ベースで作業するために強化された生産性機能まで、あらゆる C++ 開発者向けに新機能が導入され、機能強化が施されています。 今回の記事では、C++ の開発者がこれまでに直面した一般的な問題のいくつかを、マイクロソフトがどのように解決したかについて説明します。具体的には、Visual Studio 2010 では、近々リリースされる C++0x 標準

    Visual C++ - Visual Studio 2010 の C++ と MFC での新機能の詳細
    zetamatta
    zetamatta 2014/12/08
    C++0xの6 つの主要言語機能として、ラムダ式、auto キーワード、rvalue references、static_assert、nullptr、および decltype を有効にしています
  • C++11 の Tuple で複数個の型をまとめて扱う - C++ プログラミング

    C++11 には、複数個の型をまとめて 1 つにする Tuple(タプル)が規定されました。 これまでは関数で複数の値を返す必要があったときに、引数に参照で取ったり、戻り値のために構造体やクラスを別途定義する必要がありました。ただ、この方法だと引数が IN なのか OUT なのかが判りにくかったり、たった数回使うために構造体を用意するのも手間でした。 新しい Tuple を使うと、必要なときに必要な数の変数をまとめて扱うことができるようになります。 ここではその Tuple の使い方について見て行きます。 Tuple の定義 Tuple は、次のように定義します。 このように std::tuple に続けて <> の中でそれが持つデータ型を必要な数だけカンマ区切りで指定します。 これが Tuple データ型になるので、最後に変数名を添えれば、Tuple 型の変数が定義できます。 Tuple

    zetamatta
    zetamatta 2014/12/08
    STL にもタプルがあったんだ。VC++ 2010 でも使えるYo!
  • Visual C++のレシピ:動的レイアウト変更。MoveWindow

  • 1