コンソールからのメッセージボックスをアクティブにする方法

このQ&Aのポイント
  • Win32APIを使用することで、コンソールからのメッセージボックスをアクティブにすることができます。
  • コメントの部分を外してコンソールからの入力を受け取ると、メッセージボックスがコンソールの下に隠れてしまいます。
  • しかし、メッセージボックスをアクティブにすることは可能です。
回答を見る
  • ベストアンサー

コンソールからのメッセージボックスをアクティブに

Win32APIについて教えてください。 #include <iostream> #include <windows.h> int main() {   int i=0;   char mes[20]; // std::cin >> i;   std::sprintf(mes, "%dが入力されました", i);   MessageBox(NULL, mes, "test", MB_OK);   return 0; } をコンソールから実行するとメッセージボックスがアクティブになるのですが、コメントの部分を外してコンソールからの入力を受け取ると、コンソールがアクティブになってメッセージボックスがコンソールの下に隠れてしまいます。メッセージボックスをアクティブにすることはできるのでしょうか。 宜しくお願いします(WinXP、bcc32を使用しています)。

  • kary
  • お礼率95% (82/86)

質問者が選んだベストアンサー

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

>まだ、WinAPIの勉強を始めたばかりでコンソールのクラス名、 >ウインドウ名の文字列が分かりませんでした。 >さらに、調べてみます。ご回答、ありがとうございました。 ここにサンプルソースあるんで、方法は覗いてみて下さい http://www.cisnet.or.jp/home/tsuneoka/win32sub/index.html

kary
質問者

お礼

FindWindow("ConsoleWindowClass",NULL)でできました。ありがとうございました。

その他の回答 (1)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

MessageBoxの第一引数にコンソールウィンドウのウィンドウハンドルを指定します。 取得の仕方はこちらをどうぞ。 http://www.cisnet.or.jp/home/tsuneoka/win32sub/7.html

参考URL:
http://www.cisnet.or.jp/home/tsuneoka/win32sub/7.html
kary
質問者

お礼

FindWindowでコンソールのウインドウハンドルを取得すれば良いのかなと思ったのですが、まだ、WinAPIの勉強を始めたばかりでコンソールのクラス名、ウインドウ名の文字列が分かりませんでした。さらに、調べてみます。ご回答、ありがとうございました。

関連するQ&A

  • 点数の最高得点を知るプログラム

    #include<iostream> using namespace std;  int main() {  int i;  int box[5]; cout << "テストの点数を入力してください。\n"; for (int i = 0; i < 5; i++) { cin >> box[i]; } return 0; } for文で 点数を入力まで行ったのですが、 関数で配列を使って入力した最大値を調べるプログラムの練習問題なんですが、 何回もエラー出てしまいよく解っていません。 関数からポインタまで配列でどうつかうかがよく解ってないんだと思います。 良かったら教えてください、お願いします。

  • アドバイスください。

    10個の1桁の整数を入力して、入力した順番に並べたいのですが 最後の出力のところで番地が表示されてしまいます。 どうしてでしょうか? #include<iostream> using namespace std; int main(void){ int a; int b[10]; for(int i=0; i<9; i++){ cin >> a; b[i]=a; } cout << b; return 0; }

  • C++

    C++で書いた下記のプログラムが、文字の入力が1023個までなら実行されますが、1024個を超えると実行されません。なぜだか分かる方、教えてください。 #include <iostream> #include <string> using namespace std; int main(void) { string Str; cin >> Str; cout << "here"; }

  • コンソールAPIの色設定で煮詰まりました。

    C++でDOS窓を使ったプログラムを作っています。 コンソールAPIで色設定(青)をして出力を行ったところ、一定の行から別の色(白)に変わってしまいます。 この問題を解決したいと念じ、かれこれニ昼夜考えあぐねております。目はうさぎのやうに真っ赤になってしまいました。是非ともお力添えを頂きたく恐縮ながらお願い申し上げる次第です。 なお、<conio.h>による色設定は代替策として考慮済みです。 環境: OS    windows98 コンパイラ C++Builder6 ソース: #include <iostream.h> #include <conio.h> #include <windows.h> void main() { // 出力コンソールのハンドル HANDLE m_hConsoleStdOut; // 出力コンソールのハンドルを取得 m_hConsoleStdOut = ::GetStdHandle (STD_OUTPUT_HANDLE); // 前景色・背景色属性を設定 ::SetConsoleTextAttribute (m_hConsoleStdOut, 1 + (0 << 4)); for(int i=0;i<30;i++) printf("\t%2d hello world・・\n",i); getch(); }

  • macのXcodeにおけるcinについて

    現在macOSXver10.4.11のXcode2.4.1を用いて C++言語の勉強をしています。 以下のソースをコンパイルしようとしてますが「std::cin >> str1;」の行で「error: no match for 'operator>>' in 'std::cin >> str1;'」と出てコンパイルに失敗します。 原因が分かる方がいればご教授願います。 #include <iostream> #include <stdio.h> int main (void) { char *str1[32], *str2[32]; std::cout << "何か入力して下さい ==>"; std::cin >> str1; std::cout << "あなたは" << str1 << "と入力しましたね。" << std::endl; printf("何か入力してください。==>"); scanf("%s",str2); printf("あなたは、%sと入力しましたね。\n",str2); return 0; } 初歩的な質問ですみませんがご回答の程よろしくお願い致します。

  • あっているか教えてください。

    #include <iostream> int main() { int i1, k1, k2; std::cin >> k1 >> k2; while (k1 > 0 || k2 > 0) { for (i1 = 0; i1 < k1; i1++) std::cout << "A"; for (i1 = 0; i1 < k2; i1++) std::cout << "B"; std::cout << std::endl; std::cin >> k1 >> k2; } return 0; } このプログラムで下記のような問題 図形の出力 [問題]いくつかの整数データの組が入力されるものとする.各組のデータは,それぞれ,1行に出力する文字数を表しており,最初のデータは文字 G の出力数,また,次のデータは文字 A の出力数を表しているものとする.データを読み込み,指定された出力を行うプログラムを書け.なお,データは,「0 0」を入力することによって終了するものとする がじっこうできるでしょうか。.

  • getlineについて

    現在getlineを用いてプログラムを作成しようとしているのですが、例えば #include <iostream> using std::cin; using std::cout; using std::endl; int main(){ char buffer[81]; while(!cin.eof()){ cin.getline(buffer,sizeof(buffer)); cout << buffer << endl; while((!cin.eof())&&cin.fail()){ cin.clear(); cin.ignore(80,'\n'); } } return 0; } というプログラムを作った場合、標準入力から各行を80文字だけ読み込み出力をするわけなんですが、 この80文字という文字制限をなくしたい場合どういった工夫をすればいいのでしょうか?

  • どこを変えればいいですか?

    先に入力されたデータのチェック [問題]全部で 20 個の整数データを順に入力するものとする.その際,各データを入力する毎に,新たに入力されたデータが,すでに入力されたデータと異なる場合だけ,そのデータを出力するプログラムを書け.なお,データは,1行に1つずつ出力せよ. #include <iostream> int main() { int i1, i2, n = 0, x[20], data, sw; for (i1 = 0; i1 < 20; i1++) { std::cin >> data; sw = 0; for (i2 = 0; i2 < n && sw == 0; i2++) { if (data == x[i2]) sw = 1; } if (sw == 0) { std::cout << data << std::endl; x[n] = data; n++; } } return 0; }

  • 配列のプログラムですが

    #include <iostream> using namespace std; int main() { int a[100],b=-9999; int i=0,j; do { cout << "整数値を入力してください\n"; cin >> a[i]; b += a[i]; i++; }while( a[i-1] != 9999); cout << b << '\n'; for(j=0;j<i-1;j=j+1) cout << a[j] * 3 << '\n'; return 0; } このプログラムってどんな計算をしてるんですか?誰か分かる人いますか 整数値を入れてくださいって出るだけなんですが

  • javaプログラミング

    以下のプログラムがコンバイルできません なぜでしょうか? #include<iostream> #include<cmath> using namespace std; int main() { double a, b; cout << "実数 a の値を入力してください " << endl; cin >> a; cout << "実数 b の値を入力してください " << endl; cin >> b; cout << a << " の " << b << " 乗は " << pow(a, b) << "です" << endl; return 0; }

    • ベストアンサー
    • Java