<?xml version="1.0" encoding="UTF-8" ?>
<rss version="0.91">
  <channel>
    <title>Visual Studio C++のお勉強</title>
    <description>NINJA</description>
    <link>http://visualstudio05.blog.shinobi.jp/</link>
    <language>ja</language>
    <copyright>Copyright (C) NINJATOOLS ALL RIGHTS RESERVED.</copyright>

    <item>
      <title>Ｓｔｒｉｎｇ^ を wchar に変換する</title>
      <description>Formでは、Ｓｔｒｉｎｇ^ を使用すれば良いが、APIなどではwchar型が使われるため、文字列の型が異なる。&lt;br /&gt;
&lt;br /&gt;
そこで、文字列の変換を行う。&lt;br /&gt;
&lt;br /&gt;
1．　ヘッダーファイルをインクルードする。&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#ff0000&quot;&gt;#include &amp;quot;vcclr.h&amp;quot;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
2．　変換コードを利用する。&lt;br /&gt;
&lt;font color=&quot;#ff0000&quot;&gt;&lt;br /&gt;
pin_ptr&amp;lt;const wchar_t&amp;gt; wch = PtrToStringChars(ss);&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</description> 
      <link>http://visualstudio05.blog.shinobi.jp/.%EF%BD%8E%EF%BD%85%EF%BD%94%20%E6%96%87%E5%AD%97%E5%88%97/%EF%BD%93%EF%BD%94%EF%BD%92%EF%BD%89%EF%BD%8E%EF%BD%87-%20%E3%82%92%20wchar%20%E3%81%AB%E5%A4%89%E6%8F%9B%E3%81%99%E3%82%8B</link> 
    </item>
    <item>
      <title>クラスを宣言し、メソッドを呼び出す</title>
      <description>Visual C++ の MFCとは若干異なる。&lt;br /&gt;
&lt;br /&gt;
1．　ソリューションエクスプローラのサブメニューから、クラスを追加する。（ＭＦＣと同様）&lt;br /&gt;
&lt;br /&gt;
2．　「C++　クラス」を選択する。&lt;br /&gt;
&lt;br /&gt;
以下、必要に応じて対応&lt;br /&gt;
&lt;br /&gt;
3．　ヘッダーファイルに、クラスの外で「using namespace xxxxx」を追加&lt;br /&gt;
&lt;br /&gt;
4．　Dllからネイティブコードを呼び出す場合、exturn &amp;rarr; static に変更する&lt;br /&gt;
&lt;br /&gt;</description> 
      <link>http://visualstudio05.blog.shinobi.jp/.net%20%E3%82%AF%E3%83%A9%E3%82%B9/%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%92%E5%AE%A3%E8%A8%80%E3%81%97%E3%80%81%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%82%92%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%99</link> 
    </item>
    <item>
      <title>Color構造体</title>
      <description>&lt;br /&gt;
色を指定するための構造体。&lt;br /&gt;
&lt;br /&gt;
ＲＧＢやシステムの色を取得することが可能。&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;名前空間:&lt;/b&gt; System.Drawing&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#ff0000&quot;&gt;&lt;br /&gt;
&lt;strong&gt;&lt;font color=&quot;#000000&quot;&gt;例　：　Color構造体に、ＲＧＢで指定した色を設定する。&lt;/font&gt;&lt;/strong&gt;&lt;br /&gt;
Color　myClr;&lt;br /&gt;
&lt;br /&gt;
myClr&amp;nbsp; =&amp;nbsp;Color::FromArgb( 0, 0, 0 );&lt;br /&gt;
&lt;/font&gt;&lt;br /&gt;</description> 
      <link>http://visualstudio05.blog.shinobi.jp/.%EF%BD%8E%EF%BD%85%EF%BD%94%20%E8%89%B2/color%E6%A7%8B%E9%80%A0%E4%BD%93</link> 
    </item>
    <item>
      <title>.ＮＥＴ のオブジェクトの開放</title>
      <description>オブジェクトの開放は、以下のコードで行う。&lt;br /&gt;
&lt;br /&gt;
VC++ .NET 2003&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#ff0000&quot;&gt;Drawing::Font* myFont&amp;nbsp; =&amp;nbsp;new&amp;nbsp; Drawing::Font( ～ 省略 ～ );&lt;br /&gt;
&lt;br /&gt;
myFont-&amp;gt;Dispose();&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
VC++ .NET 2005&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#ff0000&quot;&gt;Drawing::Font* myFont&amp;nbsp; =&amp;nbsp;gcnew&amp;nbsp; Drawing::Font( ～ 省略 ～ );&lt;br /&gt;
&lt;br /&gt;
delete myFont;&lt;/font&gt;&lt;br /&gt;</description> 
      <link>http://visualstudio05.blog.shinobi.jp/.net%20%E5%9F%BA%E6%9C%AC/.%EF%BD%8E%EF%BD%85%EF%BD%94%20%E3%81%AE%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%AE%E9%96%8B%E6%94%BE</link> 
    </item>
    <item>
      <title>ネイティブコードを呼び出す</title>
      <description>過去の資源を使うためには、ＤＬＬを利用するのがよいが、&lt;br /&gt;
&lt;br /&gt;
.NETでは以下の方法にてネイティブコードを呼び出すことが可能である。&lt;br /&gt;
&lt;font color=&quot;#ff0000&quot;&gt;&lt;br /&gt;
// DllImport用名前空間&lt;br /&gt;
using namespace System::Runtime::InteripServices;&lt;br /&gt;
&lt;br /&gt;
// dllコードを利用可能にする&lt;br /&gt;
[DllImport(&amp;quot;user32.Dll&amp;quot;)]&lt;br /&gt;
&lt;br /&gt;
// 利用する関数のプロトタイプ&lt;br /&gt;
extern bool MessageBeep(&amp;nbsp;unsigned int uType );&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;</description> 
      <link>http://visualstudio05.blog.shinobi.jp/.net%20dll/%E3%83%8D%E3%82%A4%E3%83%86%E3%82%A3%E3%83%96%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%99</link> 
    </item>
    <item>
      <title>String オブジェクトの配列</title>
      <description>Stringオブジェクトの配列は以下のようにコードを書くことが可能である。&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#ff0000&quot;&gt;array&amp;lt;String^&amp;gt;^ ss =&amp;nbsp;gcnew array&amp;lt;String^&amp;gt;(10);&lt;br /&gt;
&lt;br /&gt;
ss[0]　=　&amp;quot;文字列ＡＢＣ&amp;quot;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10個の配列が作成される。&lt;br /&gt;
&lt;br /&gt;</description> 
      <link>http://visualstudio05.blog.shinobi.jp/.net%20%E5%9F%BA%E6%9C%AC/string%20%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%AE%E9%85%8D%E5%88%97</link> 
    </item>
    <item>
      <title>.ＮＥＴ の自動ボックス化</title>
      <description>自動ボックス化（ボクシング）とは、&lt;br /&gt;
&lt;br /&gt;
Ｆｏｒｍａｔ（）関数で数値を埋め込む処理。&lt;br /&gt;
&lt;br /&gt;
ＶＳ++ .NET 2003 の書き方&lt;br /&gt;
&lt;font color=&quot;#ff0000&quot;&gt;&lt;br /&gt;
ss　=　String::Format( &amp;quot;dtは｛0｝です&amp;quot;,&amp;nbsp; __box( dt&amp;nbsp;)&amp;nbsp; );&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
VS++ .NET 2005の書き方&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#ff0000&quot;&gt;ss　=　String::Format( &amp;quot;dtは{0}です&amp;quot;, dt );&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</description> 
      <link>http://visualstudio05.blog.shinobi.jp/.net%20%E5%9F%BA%E6%9C%AC/.%EF%BD%8E%EF%BD%85%EF%BD%94%20%E3%81%AE%E8%87%AA%E5%8B%95%E3%83%9C%E3%83%83%E3%82%AF%E3%82%B9%E5%8C%96</link> 
    </item>
    <item>
      <title>ヌルポインタの扱い</title>
      <description>マネージ形式の場合、ヌルポインタを示すのは、以下のコードで行う。&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#ff0000&quot;&gt;nullptr&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
伝統的な「NULL」ではないので、注意が必要。&lt;br /&gt;
&lt;br /&gt;
マネージ形式では、自動ボックス化という機能を最小したため、&lt;br /&gt;
&lt;br /&gt;
値0は「ボクシングされたＩｎｔ32型の値0」に変更される場合があるためらしい。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
◇　マネージ形式のヌルポインタ&lt;br /&gt;
&lt;br /&gt;
nullptr&lt;br /&gt;
&lt;br /&gt;
◇　ネイティブ形式のヌルポインタ&lt;br /&gt;
&lt;br /&gt;
NULL&lt;br /&gt;</description> 
      <link>http://visualstudio05.blog.shinobi.jp/.net%20%E5%9F%BA%E6%9C%AC/%E3%83%8C%E3%83%AB%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF%E3%81%AE%E6%89%B1%E3%81%84</link> 
    </item>
    <item>
      <title>コントロール変数が不要</title>
      <description>・ネイティブ形式では、以下のコードにて「コントロール変数」を宣言していた。&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#ff0000&quot;&gt;　CEdit*　myEdit =&amp;nbsp;(CEdit*)GetDlgItem( IDC_EDIT1 );&lt;br /&gt;
myEdit-&amp;gt;SetWindowText(&amp;quot;文字列&amp;quot;);&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
・マネージ形式のでは、以下のコードのみで利用することが可能。&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#ff0000&quot;&gt;　myEdit-&amp;gt;Text =&amp;nbsp;&amp;quot;文字列&amp;quot;&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;
ネイティブ形式でも、コントロール変数を用意してしまえば、ひとつのコードのみで済むが、&lt;br /&gt;
マネージ形式では、コントロール変数を用意する必要がなく、ひとつのコードのみで対応可能。&lt;br /&gt;
&lt;br /&gt;</description> 
      <link>http://visualstudio05.blog.shinobi.jp/.net%20%E5%9F%BA%E6%9C%AC/%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%AB%E5%A4%89%E6%95%B0%E3%81%8C%E4%B8%8D%E8%A6%81</link> 
    </item>
    <item>
      <title>ＢＭＰで保存</title>
      <description>ＢＭＰで保存する。&lt;br /&gt;
&lt;br /&gt;
DIBコード：&lt;a href=&quot;http://file.visualstudio05.blog.shinobi.jp/SaveDIB.zip&quot;&gt;file.visualstudio05.blog.shinobi.jp/SaveDIB.zip&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&quot;#ff0000&quot;&gt;BOOL xxxxxx::SaveBMPFile( CString FileName, BITMAP sBitmap, BYTE* pData )&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; CImage&amp;nbsp;&amp;nbsp;&amp;nbsp; img;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; //BYTE*&amp;nbsp;&amp;nbsp;&amp;nbsp; pImg;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; //DWORD&amp;nbsp;&amp;nbsp;&amp;nbsp; dwImgSize;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; int iDiff = 0;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; // DIB作成&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; static BITMAPINFO bmpInfo;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; if( sBitmap.bmWidth * 3 % 4 ){&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; iDiff = sBitmap.bmWidth * 3 + ( 4 - sBitmap.bmWidth * 3 % 4 );&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; else {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; iDiff = sBitmap.bmWidth * 3;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; BYTE*&amp;nbsp;&amp;nbsp;&amp;nbsp; pBuff;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; int&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; iBuffSize = iDiff * sBitmap.bmHeight;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; if( !(pBuff = (BYTE*)calloc( iBuffSize + 1, sizeof(BYTE) ))){&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // メモリの確保を失敗&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return FALSE;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; bmpInfo.bmiHeader.biSize&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; = sizeof( BITMAPINFOHEADER );&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; bmpInfo.bmiHeader.biWidth&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; = sBitmap.bmWidth;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; bmpInfo.bmiHeader.biHeight&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; = sBitmap.bmHeight;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; bmpInfo.bmiHeader.biPlanes&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; = 1;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; bmpInfo.bmiHeader.biBitCount&amp;nbsp;&amp;nbsp;&amp;nbsp; = 24;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; bmpInfo.bmiHeader.biCompression&amp;nbsp;&amp;nbsp;&amp;nbsp; = BI_RGB;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; int n = 0;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; int j = 0;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; int iCnt = 0;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; for( int i = sBitmap.bmHeight - 1; i &amp;gt;= 0; i-- ){&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; j = i * sBitmap.bmWidth * 3;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; for( int m = 0; m &amp;lt; sBitmap.bmWidth; m++ ){&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; pBuff[ n + 0 ] = pData[ j + 0 ];&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; pBuff[ n + 1 ] = pData[ j + 1 ];&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; pBuff[ n + 2 ] = pData[ j + 2 ];&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; n += 3;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; j += 3;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; iCnt++;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; n = iCnt * iDiff;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; SaveDIB( this-&amp;gt;CStringToLptstr( FileName) , pBuff, &amp;amp;bmpInfo );&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; free( pBuff );&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; return TRUE;&lt;br /&gt;
}&lt;/font&gt;&lt;br /&gt;</description> 
      <link>http://visualstudio05.blog.shinobi.jp/%E7%94%BB%E5%83%8F/%EF%BD%82%EF%BD%8D%EF%BD%90%E3%81%A7%E4%BF%9D%E5%AD%98</link> 
    </item>

  </channel>
</rss>