- ベストアンサー
MS-DOS(コマンドプロンプト)の位置
C++なんですが、 実行途中にコマンドプロンプトで数値を入力して 描画をさせてるんですが、 描画範囲とコマンドプロンプトの位置が重なってしまい、 困っています。 C++でコマンドプロンプトの位置や大きさを指定することってできないのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
GetActiveWindow で「コマンドプロンプト」のウィンドウハンドルが取れるなら, それに対して何らかのメッセージを飛ばせば動かないかな? いや, 単なる思いつきなんだけど. でも, むしろ「だったら入力もダイアログボックスかなんか使って自前で全部処理しろ」の方が普通かも知んない.
その他の回答 (1)
- asuncion
- ベストアンサー率33% (2127/6290)
>実行途中にコマンドプロンプトで数値を入力して どのようなソースコードを書かれているのでしょうか?
補足
以下のようです。 n次関数をデスクトップに表示させようというのです。 いろいろとごちゃごちゃなってますが、そこら辺は気にしないでやってください(苦笑) ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー #include<iostream.h> #include<windows.h> int main(){ int jisuu; //何次関数か int a,i,j,k,l; //for文用 int x,y,X,Y; //数学座標,実座標 int xm,ym,Xm,Ym; //数学座標の初期値,実座標の初期値 double yw,ymw; //数学座標でのyの値(これは実数.整数に直す必要あるため.) double yb,ymb; //x^kを計算する為用 double jigen[100]; //n次元の係数をいれる箱 //何次関数にするかを決める. cout <<"次数を決めてください."; cin >> jisuu; cout <<"\n"; //それぞれの次元の係数を決める. for( i = jisuu ; i >= 0 ; i-- ){ cout << i <<"次の係数を決めてください"; cin >> jigen[i] ; cout << jigen[i] << "\n"; } HWND win ; HDC dev ; HPEN shiro_pen, aka_pen, ao_pen,kuro_pen ; //ペン HBRUSH shiro_brush, murasaki_brush, daidai_brush ; //ブラシ win = GetActiveWindow(); dev = GetDC( win ); //ペンやブラシの色・太さなどを決める. shiro_pen = CreatePen( PS_SOLID, 1 ,RGB( 255,255,255 ) ); aka_pen = CreatePen( PS_SOLID, 1 ,RGB( 255, 0, 0 ) ); ao_pen = CreatePen( PS_SOLID, 1 ,RGB( 0, 0,255 ) ); kuro_pen = CreatePen( PS_SOLID, 1 ,RGB( 10, 10, 10 ) ); shiro_brush =CreateSolidBrush( RGB( 255,255,255 ) ); murasaki_brush =CreateSolidBrush( RGB( 98, 16,165 ) ); daidai_brush =CreateSolidBrush( RGB( 231,111, 12 ) ); shiro_brush =CreateSolidBrush( RGB( 255,255,255 ) ); //白のペンとブラシで土台を作る. SelectObject( dev , shiro_pen ); SelectObject( dev , shiro_brush ); Rectangle( dev ,0 ,0 , 900 , 750 ); //黒ペンでx軸,y軸を描く. SelectObject( dev , kuro_pen ); MoveToEx( dev, 0 ,375 ,NULL ); LineTo( dev , 900 , 375 ); MoveToEx( dev, 450 ,0 ,NULL ); LineTo( dev , 450 , 750 ); //初期値を求める. xm = (-450); Xm = 450 + xm; ymb = 1; ymw = 0; for( a = jisuu ; a >= 0 ; a-- ){ //x^kを計算 for( l = 1 ; l <= a ; l++ ){ ymb = ymb * xm; } ymw = ymw + jigen[a] * ymb; //数学y座標を求める(このときは実数) ymb=1; } ym = ceil(ymw); //数学y座標(実数を整数に直す) Ym=375 - ym; //実y座標 //実x座標でいう,1~900 //数学x座標でいう,-449~450 //までxを変化させて,x,yを求める. yw=0; yb=1; for( j = 1 ; j <= 900 ; j++ ){ X = j; x = X-450; //x座標がjであるときの,y(実数)を求める. for( k = jisuu ; k >= 0 ; k-- ){ //x^kを計算 for( l = 1 ; l <= k ; l++ ){ yb = yb * x; } yw = yw + jigen[k] * yb; yb=1; } y = ceil(yw); //数学y座標(実数を整数に直す) X = 450 + x; //実x座標 Y = 375 - y; //実y座標 //(Xm,Ym)から(X,Y)に線を引く SelectObject( dev , kuro_pen ); MoveToEx( dev, Xm ,Ym ,NULL ); LineTo( dev , X , Y ); //(Xm,Ym)を(X,Y)に代入. Xm=X; Ym=Y; yw=0; } //ペンやブラシを捨てる(片付ける) DeleteObject( shiro_pen ); DeleteObject( aka_pen ); DeleteObject( ao_pen ); DeleteObject( shiro_brush ); DeleteObject( murasaki_brush ); DeleteObject( daidai_brush ); DeleteObject( kuro_pen ); ReleaseDC( win , dev ); }
お礼
回答、ありがとうございます。 GetActiveWindowですか。わかりました、一度試してみます☆ 確かに・・・、その通りかもしんないですね(^^;;) ありがとうございましたm(__)m