Visual C++ 2010 Express Edition 小技集

String型の取り扱い

[注意事項] 改行は”\r\n”.

参考リンク:http://msdn.microsoft.com/ja-jp/library/s1wwdcbf(v=VS.71).aspx

String型からChar型への変換

String^ out2;
char str3[100];
sprintf( str3, "%s", out2 );
// 通常,String型は2バイト構造?で,Char型は1バイト構造で別物なので変換が厄介?
// strcpy(str,"123");は,小文字の方のstring型のものなので,String型には不適用. 

Char型からString型への変換

char str[100] = "abcde";			
String^ out = gcnew String(str);

Int型/Double型からString型への変換

  • Int型
    int a;			
    textBox1->Text=a.ToString();
  • Double型
    double b;
    textBox2->Text=b.ToString("F2"); // 「F2」は小数点いか2桁

参考リンク:http://imagingsolution.blog107.fc2.com/blog-entry-118.html

String型からDouble型への変換

  • 候補1
    double bb;
    bb=Double::Parse(textBox2->Text);
    ※ただし,数値以外が入力されると,処理停止
  • 候補2
    double aa2;
    Double::TryParse(textBox2->Text, aa2);
    ※数値以外が入力されると「0」を戻すので,判断しやすい.

参考リンク:http://msdn.microsoft.com/ja-jp/library/te484d4d(v=VS.80).aspx

String型での位置出し

int cc=0;
cc=str_data->IndexOf(",");       // 頭からのはじめて「,」が出る位置を検出
cc=str_data->IndexOf(",",cc+1);  // 2番目に「,」の位置を

String型からString型への切り出し

int sss1=0;    // 開始位置
int sss2=10;   // 終了位置
String^ out1;  // 	もともとのString型
String^ out2;  // 切り出したString型		
out2=str_data->Substring(sss1,sss2-sss1+1);	// 

ファイルの取り扱い

ファイルの選択「openFileDialog」

openFileDialog1->Title = "読み込むファイルを選択してください.";
openFileDialog1->Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
openFileDialog1->FilterIndex = 2;
openFileDialog1->RestoreDirectory = true;
if ( openFileDialog1->ShowDialog() == Windows::Forms::DialogResult::OK ){
                      String ^name_file_in = openFileDialog1->FileName; 
}

ファイルデータのString型への読み込み「StreamReader」

using namespace System::IO;  
StreamReader ^ file_in = gcnew StreamReader((name_file_in),System::Text::Encoding::GetEncoding("shift-jis") );
String ^ str_data;
str_data = file_in->ReadToEnd();
file_in->Close();
//str_data = file_in->ReadLine();
//※Readlineでもよいが、この方法だと\r\nで途切れてしまう.
//そのため,1行ごと読み込む工夫が必要となる.

参考リンクhttp://msdn.microsoft.com/ja-jp/library/6aetdk20.aspx

String型のファイルへの書き込み「StreamWriter」

StreamWriter^ file_out = gcnew StreamWriter("test2.txt", false, System::Text::Encoding::GetEncoding("shift_jis"));
file_out->Write(str_data+"\r\n"+"aaaa");     // str_dataに収納されているデータに改行および「aaaa」を追加してファイル書き込む
file_out->WriteLine("bbbbbb"); // 追加として,"bbbbbb"を次の行に1行書き込む 
file_out->Close();
// String型の改行は「\r\n」となるので注意
// ファイルに上書きするためには,まずStreamReaderにてReadToEnd()で
// 一括読み込みでClose(). その後,StreamWriterにてWrite()でReadToEnd()で
// まとめ書きをした後に,新たな追加分を,Write()もしくはWriteLine()で行う.

参考リンク:http://msdn.microsoft.com/ja-jp/library/system.io.streamwriter_members(v=VS.80).aspx

描画の取り扱い

グラフ領域の宣言

Graphics^ g1=pictureBox1->CreateGraphics();

描画ペンの宣言

Pen^ pn0=gcnew Pen(Color::FromArgb(255,255,255),1);
Pen^ pn1=gcnew Pen(Color::FromArgb(2,255,10),1);
Pen^ pn2=gcnew Pen(Color::FromArgb(0,0,255),3);

一括領域描画の宣言

int rr1=255, gg1=128, bb1=0;
Brush^ bsh=gcnew SolidBrush(Color::FromArgb(255,255,255));
Brush^ bsh1=gcnew SolidBrush(Color::FromArgb(rr1,gg1,bb1)

長方形領域の描画

int x1=0;   // 左上端x座標
int x2=0;   // 左上端y座標
int w=10;  // 横幅
int l=10;  // 縦幅
g1->FillRectangle(bsh,x1,y1,w,l); 
g1->FillRectangle(bsh,0,0,pbw1,pbh1); 

直線の描画

int x1=0;   // 左端x座標
int x2=0;   // 左端y座標
int y1=10;  // 右端x座標
int y2=10;  // 右端y座標
g1->DrawLine(pn1,x1,y1,x2,y2);

文字の描画

int x1=0; // 文字のx座標
int y1=0; // 文字のy座標
String^ str = gcnew String(str1);
g1->DrawString( str, gcnew System::Drawing::Font("Arial",16), System::Drawing::Brushes::White, x1, y1);

楕円形の描画

int x1=10; // 楕円形に外接する長方形の左上端x座標 
int y1=20; // 楕円形に外接する長方形の左上端y座標
int d1=2;  // 楕円形の横幅  
int d2=4;  // 楕円形の縦幅    
g1->DrawEllipse(pn3,x1,y1, d1, d2);

音の取り扱い

共通の宣言部

using namespace System::Media;

BEEP音

SystemSounds::Asterisk->Play();

WAVファイル再生

SoundPlayer^ player = gcnew SoundPlayer("001.wav");
player->Play();
※wavファイルは,実行形式ファイルと同じ位置においてください.

タイマーの取り扱い

※Windowsアプリケーションではwhileループを利用するとフリーズしてしまう.
そのため,whileループの代わりに,タイマースレッドでのループ処理を行う.

開始

timer1->Interval = 200; // 単位はミリ秒
timer1->Enabled = true;

終了

timer1->Enabled = false;

チェックボックスの取り扱い

if(checkBox1->CheckState == System::Windows::Forms::CheckState::Checked){
 check_flag1=1;
}
else if(checkBox1->CheckState == System::Windows::Forms::CheckState::Unchecked{
 check_flag1=0;
}

コンボボックスの取り扱い

int a;
a=(int)(comboBox1->SelectedIndex);
// 一番上が「0」,段が下がるごとに「1」値が増加

スレッドの取り扱い

開始コマンド

backgroundWorker1->RunWorkerAsync();

スレッドルーチン

// 上記のコマンドで下記のルーチンが開始される
private: System::Void backgroundWorker1_DoWork(System::Object^  sender, System::ComponentModel::DoWorkEventArgs^  e) {
※特に描画を行う内容が良い
※ただし,label1->Textなどは利用できない.

スレッド終了後のルーチン

private: System::Void backgroundWorker1_RunWorkerCompleted(System::Object^  sender, System::ComponentModel::RunWorkerCompletedEventArgs^  e) {
※こちらで,label1->Textなどを利用する.

ラベルの取り扱い

文字表示

label2->Text="abc";	
label2->Update();
※「Update();」は必ず必要.

数値表示

int a=10;
label2->Text=a.ToString();	
label2->Update();

コマンドプロンプト編

キーボード入力

  • 宣言部
    #include <conio.h>
    char ch=0;
  • メイン
    while(1){
      if(kbhit()!=0){
        ch=getch();
        if(ch=='1'){
          mflag=0;
          break;
        }
        else if(ch=='2'){
          mflag=1;
          break;		
        }
      }  
    }

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-09-24 (土) 19:58:32 (2248d)