個人事業主の方必見!確定申告のお悩み解決

VC++言語ですがMFCは使いません、
参考資料でも、かまいませんから教えてください。

A 回答 (4件)

>EM_LINESCROLLはWinUser.hにあるようなので



コントロール系のメッセージの場合、WindowsX.hにマクロが定義されている場合があります。
EM_LINESCROLLの場合は…
#define Edit_Scroll(hwndCtl, dv, dh) ((void)SNDMSG((hwndCtl), EM_LINESCROLL, (WPARAM)(dh), (LPARAM)(dv)))
なんてのがありますね。

Edit_Scroll(Editコントロールのウィンドウハンドル, 行数, 桁数)
って感じでしょうか。
    • good
    • 0
この回答へのお礼

便利なマクロの紹介ありがとうございました。

指定行数までスクロールして、おまけにテキストもついて来ました。
指定行数と言うより現在のツマミの位置からの相対のようで、
ツマミを最初にもどすマクロがないため、何回かすると一番下までスクロールしました、今後の課題になります。

お礼日時:2018/11/28 11:36

>先に紹介のあったコードに


>Var
>Sub
>End
>がありましたが

#1で掲示したのはMSDNのリファレンスページだけですけど、具体的にどこにありましたかね?
VBっぽい感じはしますが……
Edit Control MessageのリファレンスでVBは出てこないと思いますが。
    • good
    • 0
この回答へのお礼

提示のURLは英語でしたのでEM_LINESCROLLのキーワードで検索をかけたところ
Var、Sub、EndのコードがみつかったのでEM_LINESCROLLはVBで使うものだと思いました。
EM_LINESCROLLはWinUser.hにあるようなので、勉強してみます。
ありがとうございました。

お礼日時:2018/11/28 08:49

>実際にマウスでテキストをスクロールしてみる操作をコードで同じ事をしたいと考えています。



SendInput()ではなく…ですかね?
https://msdn.microsoft.com/ja-jp/library/cc41100 …

>EM_LINESCROLLはVC++で使えますか?

普通にSendMessage()でウインドウに対して投げるだけです。
HWNDはEditコントロールのウィンドウハンドル、メッセージはEM_SCROLL、wParamやlParamはリファレンスページに書かれているとおりです。
    • good
    • 0
この回答へのお礼

>SendInput()ではなく…ですかね?
プログラムでスクロールバーのツマミを動かすだけならできますが、テキストが書き換わりません。

先に紹介のあったコードに
Var
Sub
End
がありましたが
VC++ではこの記述はないので参考になりませんでした。
VC++の情報をお願いします。

お礼日時:2018/11/27 21:11

どういう操作を想定しているんですかね?



SetScrollInfo()とかで十分な気がしますけど。
エディットボックスなら…Windowsのバージョンに依存する可能性はありますが、

EM_LINESCROLLメッセージとか。
https://docs.microsoft.com/en-us/windows/desktop …
EM_SCROLLメッセージとか。
https://docs.microsoft.com/en-us/windows/desktop …

操作した結果、画面も書き換わるのか…については未検証です。
    • good
    • 0
この回答へのお礼

こちらでもお世話になります。

>SetScrollInfo()とかで十分な気がしますけど。
こちらは色々試しましたがダメでした。
やりたいことは
実際にマウスでテキストをスクロールしてみる操作をコードで同じ事をしたいと考えています。

EM_LINESCROLLはVC++で使えますか?
Var
Sub
End
これはビジュアルスタジオではみかけませんが・・・

よろしくお願いします。

お礼日時:2018/11/27 17:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QCのif文の書き方の質問です

『x=a & j=1 』の様に、『&』の前後に式を書くことがありますか?
使ったことがないので、ここに質問させて頂いております。
コメント、説明頂けますと大変有り難いです。

if stype=='L' then
x=a & j=1 //===
elseif stype=='M' then
x=a+(h/2) & j=2//============
else x=a+h & j=3//=================
end

以上、宜しくお願いします。

Aベストアンサー

見た目から、命令の区切りに使っているように見えますが、
公式マニュアルを確認しても ; や , はありましたが & は見つけられなかったので断言はできません。

https://help.scilab.org/docs/6.0.1/ja_JP/comma.html
https://help.scilab.org/docs/6.0.1/ja_JP/semicolon.html

QC言語でエラーの直し方が分かりません。

x_i = cos ((PI*(2*i-1))/( 2*N )) i =1,2,...,N   (見づらくてすみません)

という式を計算して、結果を出力したいのですが、コンパイルできません。
自分で書いてみたプログラムとエラーを書いておくので、どこを直せばいいか教えてください。

#include <stdio.h>
#include <math.h>

#define PI 3.1415926535

double x_i(int i, int N)
{
for (i = 1 ; i <= N ; i++) {
x_i(i, N) = cos ((PI*(2*i-1))/( 2*N ));

}
}

int main()
{
int i, N ;
printf("N= ");
scanf("%d", &N);
for (i = 1 ; i <= N ; i++) {

printf("x[%2d] = %f\n",i, x_i(i,N));

}

return 0 ;
}


C:\Users>gcc nnn.c
nnn.c: In function 'x_i':
nnn.c:9:16: error: lvalue required as left operand of assignment
x_i(i, N) = cos ((PI*(2*i-1))/( 2*N ));
^


初心者なのでできれば丁寧に教えていただけると助かります。
よろしくお願いします。
結果は、
C:\Users>a
N = 5
x[ 1] = 0.951057
x[ 2] = 0.587785
x[ 3] = 0.000000
x[ 4] = -0.587785
x[ 5] = -0.951057

という風にしたいです。

x_i = cos ((PI*(2*i-1))/( 2*N )) i =1,2,...,N   (見づらくてすみません)

という式を計算して、結果を出力したいのですが、コンパイルできません。
自分で書いてみたプログラムとエラーを書いておくので、どこを直せばいいか教えてください。

#include <stdio.h>
#include <math.h>

#define PI 3.1415926535

double x_i(int i, int N)
{
for (i = 1 ; i <= N ; i++) {
x_i(i, N) = cos ((PI*(2*i-1))/( 2*N ));

}
}

int main()
{
int i,...続きを読む

Aベストアンサー

>以下のプログラムで正常に動いたので、これを関数に変えればいいと思っていたのですが、うまくいかず質問させていただいてるという流れです。

・ループはコール側でやっているので関数内でやる必要はない。
・ループで結果を表示しているので配列は関係ない。
ということで…

>double x_i(int i, int N)
>{
> for (i = 1 ; i <= N ; i++) {
>  x_i(i, N) = cos ((PI*(2*i-1))/( 2*N ));
> }
>}

は、
double x_i(int i, int N)
{
 return cos ((PI*(2*i-1))/( 2*N ));
}
になるだけなんじゃないですかね?


>int i[20];   //配列の指定の大きさ
>int N[20];
で、関数の方は
>double x_i(int i, int N)
で、コールは
>printf("x[%2d] = %f\n",i, x_i(i,N));

コールする時の第1引数と第2引数は配列を渡していますが、関数の仮引数の方と一致しません。
ということで、コンパイルエラーでしょう。

>x_i(i, N) = cos ((PI*(2*i-1))/( 2*N ));

既に指摘していますし、他の方からも回答ありますが、関数コールに対して値の代入はできません。
ので、こちらもコンパイルエラーでしょう。


>Nは5と決まっているわけではなくて、20までで自分で、自由に決めれるようにしたいです。

>printf("i = ");
>scanf("%d", &N);

iなのかNなのか不明ですが…
規定の範囲の値が入力されるまでループするようにすればよいかと。

do {
 printf("i = ");
 scanf("%d", &N);
} while((N < 0) || (N > 20));
とか?
# scanf()でのエラー処理していませんが。(数字以外を入力すると無限ループに堕ちるとか)

>以下のプログラムで正常に動いたので、これを関数に変えればいいと思っていたのですが、うまくいかず質問させていただいてるという流れです。

・ループはコール側でやっているので関数内でやる必要はない。
・ループで結果を表示しているので配列は関係ない。
ということで…

>double x_i(int i, int N)
>{
> for (i = 1 ; i <= N ; i++) {
>  x_i(i, N) = cos ((PI*(2*i-1))/( 2*N ));
> }
>}

は、
double x_i(int i, int N)
{
 return cos ((PI*(2*i-1))/( 2*N ));
}
になるだけなんじゃないですかね?
...続きを読む

QC言語、関数を用いたプログラムがうまくいきません。

C言語で、以下の漸化式について
T(0)=1
T(1)=X             のとき

T(k+1)=2XT(k)-T(k-1)    (k = 0,1,2...,20)
を、kを20以下の自分の好きな値を入力して、計算を回して出力するプログラムを以前作りました。


以下にプログラムの内容と結果を書きます。
#include <stdio.h>
#include <math.h>

int main()
{
double x ;
int k ;
int K ;
double T[20] ;

printf("k = ") ;
scanf("%d", &K) ;

printf("x = ") ;
scanf("%lf", &x) ;

T[0] = 1 ;
T[1] = x ;

for (k = 1; k < K; k++) {
T[k+1] = 2 * x * T[k] - T[k - 1];
}

for (k = 0; k <= K; k++) {
printf("T[%2d] = %f\n",k,T[k]);
}
return 0 ;
}

//結果//
k = 5
x = 2
T[ 0] = 1.000000
T[ 1] = 2.000000
T[ 2] = 7.000000
T[ 3] = 26.000000
T[ 4] = 97.000000
T[ 5] = 362.000000

k = 4
x = 3
T[ 0] = 1.000000
T[ 1] = 3.000000
T[ 2] = 17.000000
T[ 3] = 99.000000
T[ 4] = 577.000000


今回は上記のプログラムを、関数を使って作りました。
以下にプログラムの内容と結果を書きます。


#include <stdio.h>
#include <math.h>

double t[20];

double T(double x, int k)
{
if (k = 0)
{
return 1 ;
}

if (k = 1)
{
return x ;
}

else
{
return 2 * x * t[k] - t[k - 1];
}

}

int main()
{
double x ;
int k, K ;
double t[20];

printf("k = ") ;
scanf("%d", &K) ;

printf("x = ") ;
scanf("%lf", &x) ;

for (k = 0; k <= K; k++)
{
printf("T[%2d] = %lf\n",k,T(x,k));
}
return 0;
}


//結果//
k = 5
x = 2
T[ 0] = 2.000000
T[ 1] = 2.000000
T[ 2] = 2.000000
T[ 3] = 2.000000
T[ 4] = 2.000000
T[ 5] = 2.000000

k = 4
x = 3
T[ 0] = 3.000000
T[ 1] = 3.000000
T[ 2] = 3.000000
T[ 3] = 3.000000
T[ 4] = 3.000000


このように、計算がうまくいきません。
何を直せばうまくいくかなど教えていただけると嬉しいです。
また、C言語、プログラミング初心者なので、わかりやすく丁寧に教えていただけると助かります。
よろしくお願いします。

C言語で、以下の漸化式について
T(0)=1
T(1)=X             のとき

T(k+1)=2XT(k)-T(k-1)    (k = 0,1,2...,20)
を、kを20以下の自分の好きな値を入力して、計算を回して出力するプログラムを以前作りました。


以下にプログラムの内容と結果を書きます。
#include <stdio.h>
#include <math.h>

int main()
{
double x ;
int k ;
int K ;
double T[20] ;

printf("k = ") ;
scanf("%d", &K) ;

printf("x = ") ;
scanf("%lf", &x) ;

T[0] = 1 ;
...続きを読む

Aベストアンサー

C言語における比較演算子は"=="
"="は代入演算子。
if文の()の中が全て"="になっていますね。これを全て"=="に変えましょう。

if(k=0)
はkに0を代入。そしてその代入した値がその式の値として評価されます。
つまり、k=0は偽として処理される。(C言語において式の値が"0"=偽)
kの値はこの時点で"0"になっている。

if(k=1)
kに1が代入される。そしてその式の値は"1"であり真(C言語において式の値が"0"以外=真)
真であるため、ifの後の{}中の式が実行される。return文なのでここでこの関数は終了される。
要するにxの値がそのまま出力される。
当然それ以下の式は実行されない。

Qc言語について

このプログラムは(ありがとう)を5回入力するのですが、n<5だと4回しか表示されないと思うのですが、どうなんでしょうか。

Aベストアンサー

forループの1回目のnの値は0なのでprint文を実行。
2回目は1なのでprint文を実行。
3回目は2なのでprint文を実行。
4回目は3なのでprint文を実行。
5回目は4なのでprint文を実行。
6回目は5なのでループを抜ける。

参考まで。


[おまけ]
print文の次の行の}はforの下に来るようにした方が可読性が高いです。
同様にreturn文の次の行の}は3行目の{と同じ位置にした方が可読性が高いです。
そうすると全体として{から}までの範囲を直観的に理解できてソースコードを読むのが楽になります。

QC言語のものなのですが、具体的にこの文がなにをしているかについてわからないので説明をお願いいたします

C言語のものなのですが、具体的にこの文がなにをしているかについてわからないので説明をお願いいたします。

Aベストアンサー

画像じゃなく、テキストで貼ってほしいところですが…。
で、掲示されている範囲ではs_copy()とs_reverse()の仕様が不明です。
# まぁ、名前からだいたい想像は付きますけども。

ということで、下記のページをどうぞ。
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13182921508

Qsleep関数の原理について

sleep関数がPC内でどういった原理で一定時間おきに動作などを行っているのか教えてください。
「Linuxカーネルがどういう働きしている」「ハードがどういう動作している」とかです。

Aベストアンサー

>一定時間おきに動作などを行っているのか
確実にsleep関数で指定した時間はお休みしているだけであり、
厳密には「一定時間おき」に動作はしません。

・LinuxはマルチタスクOSである
・一定時間(確か100Hzだったと思います)ごとにタスク切り換えを行っている

この2点がわかっていれば、
>「Linuxカーネルがどういう働きしている」
は簡単ですよね。

「sleep関数で指定した時間は、タスク切り換えで自分にCPU時間を割り当てることはしない」というだけです。

>「ハードがどういう動作している」
特段ハードでは、sleep関数実現のために何もしていません。

<おまけ>
sleep関数を呼ばなくてもマルチタスクOS上のタスクは、
 ユーザの知らないタイミングで休み休み動いている
ということです。

Qスクロールバーについて

親ウインドーからクリエイトしたエディトウインドーにスクロールバーを取り付けるのですが、WM_VSCROLLが発生しません。
親ウインドー自体にエディトウインドーを取り付けるとWM_VSCROLLが発生しています。
子ウインドーでもWM_VSCROLLが発生する方法を教えてください。

1、親ウインドークリエイト
2、WM_CREATE発生
3、以下WM_CREATE内処理
3-1、h_エディトウインドー = CreateWindow("EDIT", "",・・・WS_VSCROLL・・・);
3-2、親ウインドーにスクロールバーSetScrollInfo(hwnd, SB_VERT , &scr , TRUE);


結果、スクロールバーは親とエディトボックスにそれぞれ2組のスクロールバーができますが
ツマミの移動でWM_CREATEが発生するのは親のツマミだけです。
3-2を記述しない場合は、子にバーは出来ますがWM_CREATE発生しません。

Aベストアンサー

>>  if (HIWORD(wParam) == EN_VSCROLL)
>のEN_VSCROLLは(HMENU)ID_xxxにしないといけないようです。

HIWORD()とLOWORD()の違いは確認した方がよい…かと。
https://docs.microsoft.com/en-us/windows/desktop/controls/en-vscroll

>ツマミをドラッグした時の位置が来ません、
>scr.nTrackPosには全く何も反応がありません。

https://docs.microsoft.com/en-us/windows/desktop/api/winuser/ns-winuser-tagscrollinfo
SIF_TRACKPOSが必要かと思いますが、設定していますか?

Qflag変数が理解に苦しむ!(C++) ライントレースで誤差動を防ぐためにflag変数を入れます。

flag変数が理解に苦しむ!(C++)
ライントレースで誤差動を防ぐためにflag変数を入れます。
宣言はint flag=0でOFF,flag=1でONとしています。右のセンサーのフラクが立っている間は左のセンサーのフラグは立たないようにします。
if(p1_0==0 && flag==1){
turnright();
continue;

if(p1_3==0 && flag==1) {
turnleft();
continue;

これではエラーと出ます。何か違うのは感じるのですが、ど忘れしました。宣言から間違っている気がするので、プログラミングLOVEな先輩方にご教示願いたいと思いますm(__)m

Aベストアンサー

2個目のifのブロック閉じて無いけど
大丈夫?

で、コンパイルエラーが出たらエラーメッセージを載せる。
これはプログラミングの質問の基本の基本の基本。

Q構造体を初期化する方法

次の構造体を
typedef struct {
int a;
int b;
int c;
} ABC;

次のように初期化したいです
ABC data = {
.a = 100,
.b = 200,
.c = 300,
};

この初期化の方法が使えるのはどちらの環境ですか
VisualStudioだとできなかったきがします
それからこの初期化の方法はなんという名称でしょうか

Aベストアンサー

これは C99 で導入されたものなので, (C++ にない機能を入れるつもりのないらしい) Microsoft 製のものでは当面ダメだと思います. 逆にいえば「C99 にだいたい対応しているもの」ならだいたい OK のはず. もともとは GCC の拡張機能だったと記憶しているので, GCC なら (しかるべくフラグを与えれば) いけるし Clang でもできる.

名称は... 特にないなぁ. 「.a」の部分は「要素指示子」という呼び方があるけど, 実際には
ABC data = {
.a = 100,
200,
.c = 300,
};
のように混在することもできるから「全体としての名称」に意味があるとも思えない.

Qc++ プログラムについて

txtデータを読み込みデータの行をカウントする
指定した行の前後に違うデータを書き込む

指定する行は複数行であるが書き込むデータは始め以外同じ
書き込む数の初めは1からカウントする

書き込むデータは2進数である
といったプログラムを作成したいのですが
アドバイスなどお願いします

Aベストアンサー

>javaプログラムは組んだことがあるのですがc++は初めてでサイトを見てもよくわからないことが多いので
基本的にあなたが悩んでいる部分は言語の違いは関係ありません
考え方の問題なので

https://gab-km.bitbucket.io/blog/html/2013/11/21/typical_of_cplusplus_file_io.html
http://www.geocities.jp/eneces_jupiter_jp/cpp1/005-004.html
必要な知識はここら辺ですかね?

まぁこの際ある程度書きますが...
頭の中で考えているだけで、実際に動かしているわけではないので
正しく動く保証はできません、そこは調整してください
あといくらか省略していますが、既にご自身で書いてあるソースから想像できると思うので
そこは自分で書き足してくださいね

挿入する行の計算方法は「指定した行」±1ですね

cin >> a; //行指定

std::ofstream ofs("新しいファイル");
std::string line;
int i = 1;
while (std::getline(ifs, line))
{
if( a == i-1 )
{
ofs << 挿入するデータ << std::endl;
}

ofs << line << std::endl;

if( a == i+1 )
{
ofs << 挿入するデータ << std::endl;
}
}

我ながらなかなか雑な処理です
もっとスマートに作れるでしょうけど
まぁ求めている出力は出せるかと

>javaプログラムは組んだことがあるのですがc++は初めてでサイトを見てもよくわからないことが多いので
基本的にあなたが悩んでいる部分は言語の違いは関係ありません
考え方の問題なので

https://gab-km.bitbucket.io/blog/html/2013/11/21/typical_of_cplusplus_file_io.html
http://www.geocities.jp/eneces_jupiter_jp/cpp1/005-004.html
必要な知識はここら辺ですかね?

まぁこの際ある程度書きますが...
頭の中で考えているだけで、実際に動かしているわけではないので
正しく動く保証はできません、そ...続きを読む


人気Q&Aランキング