2008年2月5日火曜日

VC++2005 ファイルのドラッグ&ドロップの実装(訂正)

VC++2005 ファイルのドラッグ&ドロップの実装(訂正)

08/02/04 の記事に間違いがありましたので、訂正したもの記載します。

エクスプローラからファイルをドラッグしてテキストボックスにドロップすると
ファイル名を表示する方法です。

//-------------------------------------------------------------------
private: System::Void textBox1_DragEnter(System::Object^ sender, System::Windows::Forms::DragEventArgs^ e) {
if(e->Data->GetDataPresent(DataFormats::FileDrop))
{
e->Effect = DragDropEffects::All;
}
else
{
e->Effect = DragDropEffects::None;
}
}
//-------------------------------------------------------------------
private: System::Void textBox1_DragDrop(System::Object^ sender, System::Windows::Forms::DragEventArgs^ e) {
if(e ->Data ->GetDataPresent(DataFormats::FileDrop)) // ファイルドロップのとき
{
array<System::String^>^ files = // 列挙型のファイル名を一覧を取得する
static_cast<array<System::String^>^>
(e->Data->GetData(DataFormats::FileDrop , false));
this->textBox1->Text = files[0]; // 先頭ファイル出力
}
}
//-------------------------------------------------------------------
※上記ソースはそのままコピーして使用するとコンパイルエラーとなります。
全角'<'を半角'<'すれば大丈夫です。

2008年2月4日月曜日

VC++2005 ファイルのドラッグ&ドロップの実装

VC++2005 ファイルのドラッグ&ドロップの実装

エクスプローラからファイルをドラッグしてテキストボックスにドロップすると
ファイル名を表示する方法です。

//-------------------------------------------------------------------
private: System::Void textBox1_DragEnter(System::Object^ sender, System::Windows::Forms::DragEventArgs^ e) {
if(e->Data->GetDataPresent(DataFormats::FileDrop))
{
e->Effect = DragDropEffects::All;
}
else
{
e->Effect = DragDropEffects::None;
}
}
//-------------------------------------------------------------------
private: System::Void textBox1_DragDrop(System::Object^ sender, System::Windows::Forms::DragEventArgs^ e) {
if(e ->Data ->GetDataPresent(DataFormats::FileDrop)) // ファイルドロップのとき
{
array^ files = // 列挙型のファイル名を一覧を取得する
static_cast<array<System::String^>^>
(e->Data->GetData(DataFormats::FileDrop , false));
this->textBox1->Text = files[0]; // 先頭ファイル出力
}
}
//-------------------------------------------------------------------

2008年1月26日土曜日

VC++2005 フォームをシングルトンのモードレスにする方法

VC++2005 フォームをシングルトンのモードレスにする方法

フォームのインスタンスを静的フィールドに保持しておき、nullのときは新しいインスタンスを作成するようにします。ボタンを押すと、Form2 のインスタンスに対して Show() します
詳細は以下に示します。

//-----------------------------------------------
// 親ウィンドウ Form1.h ボタンを押したとき
// button1 を押すと Form2 を表示します
//-----------------------------------------------
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
Form2::Instance()->Show();
}
//-----------------------------------------------
// 子ウィンドウ Form2.h のコンストラクタ部
//-----------------------------------------------
public ref class Form2 : public System::Windows::Forms::Form
{
public:
//*********** 追加 ↓ ***********
static Form2^ Instance()// インスタンスの生成を行う静的メンバ関数
{
if(_instance == nullptr){
_instance = gcnew Form2;
}
return _instance;
}
//*********** 追加 ↑ ***********
public:
Form2(void)
{
InitializeComponent();
//
//TODO: ここにコンストラクタ コードを追加します
//
}
//-----------------------------------------------
// 子ウィンドウ Form2.h のメンバ変数宣言部(静的)
// 必要なデザイナへインスタンス変数を追加します
//-----------------------------------------------
private:
static Form2^ _instance; // インスタンス変数
//-----------------------------------------------
// 子ウィンドウ Form2.h の×を押したとき
// Form2 のインスタンス変数も初期化します
//-----------------------------------------------
private: System::Void Form2_FormClosed(System::Object^ sender, System::Windows::Forms::FormClosedEventArgs^ e) {
_instance = nullptr;
}
//-----------------------------------------------

2008年1月23日水曜日

VC++2005 ボタンをオルタネート動作にする方法

VC++2005 ボタンをオルタネート動作にする方法

ボタンをオルタネート動作にするには、チェックボックスを使用すると簡単に行えます。

■プロパティを変更します。
Appearance = "Button"

■ボタンを押したときボタンの色を変更します。
private: System::Void checkBox1_CheckedChanged(System::Object^ sender, System::EventArgs^ e) {
if( checkBox1->Checked == true )
{
checkBox1->BackColor::set(Color::Green);
}
else
{
checkBox1->BackColor::set(Color::WhiteSmoke);
}

2007年12月19日水曜日

C++2005 大文字混在文字列のバイト数を求める方法

文字数を求めたいのなら、以下に示すように簡単です。
int len = timedate->Length;

しかし、バイト数を求めるメソッドがありません。

以下の例では、test.txt に文字列を書込む処理ですが、
Write()の第1引数は、arrayなので、大文字・小文字が混在した文字列の場合、
文字数=バイト数とはならないので書込文字数が少なくなるときがあるため、バイト数を求める必要があるのです。


FileStream textfile( test.txt , FileMode::Append); // 追記モードでファイルを開く

System::String^ moji = "私(A)は何バイトだと思います?";

char pbuf[1024];
sprintf_s( pbuf , sizeof(pbuf) , "%s" , moji ); // char型変換

array ^ar = gcnew array(1024);
pin_ptr str = &ar[0];

System::Text::Encoding ^sjisEnc = System::Text::Encoding::GetEncoding("Shift_JIS");
int len = sjisEnc->GetByteCount( moji ); // バイト数取得

for(int ii=0 ; ii<len ; ii++ ){
str[ii] = pbuf[ii];
}
textfile.Write( ar , 0 , len ); // ファイルに書込み

2007年12月8日土曜日

DirectX SDK November 2007 の注意事項

DirectX SDK November 2007 には
dmusic.h が入っていません。
dmusic.h を使用したいときは、
DirectX SDK August 2007
を使用する必要があります。

詳しくは、以下を参照してください。
http://www.microsoft.com/japan/msdn/directx/Releasenotes/dxreadmeAug07J.aspx

2007年12月3日月曜日

Webアプリケーション新規作成のエラー対処

ASP.NET Webアプリケーションを新規作成しようとすると、以下のエラーが出現するときがあります。

"指定されたWebサーバーでASP.NET Version 1.1が実行されていません。ASP.NET Webアプリケーションまたはサービスを実行することはできなくなります。"

対処法は以下の通り。

1)コマンドプロンプト画面に以下のフォルダにある "aspnet_regiis.exe"をドラッグ&ドロップする。
C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_regiis.exe

2)インストールオプション /i を入力してリターンを押す。
C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_regiis.exe /i

すると、以下の文章が表示します。

ASP.NET(1.1.4322.0)のインストールを開始します。
ASP.NET(1.1.4322.0)のインストールが完了しました。