サイズ変更可能なダイアログボックスアプリケーションを作っています

ダイアログサイズ変更時に
GetClientRect( m_DlgSize );
のようにしてサイズを取得し、設定ファイルにm_DlgSizeを保存します

次回起動時にInitDialog()で
SetWindowPos( NULL, 0, 0, m_DlgSize.Width(),m_DlgSize.Height() ,SWP_NOMOVE);
のように復元しました。
幅はきちんと復元できたんですけど高さが小さくなってしまいます。
どうやらGetClientRectではメニューバーやタイトルバーの高さを含めない座標を返し、
SetWindowPosではそれらも含めてサイズを設定してしまうようです
この差を埋めるためにメニューバーやタイトルバーの高さを取得する方法がわかりません。
何か良い方法があったらご教授願います。
環境はVC++6.0 MFCです。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

dannerです。



>> WINDOWPLACEMENTは最大化とか最小化には対応できそうですが、ウィンドウの角を引っ張っての微妙なサイズ変更を保存することができないですよね??(本当か?)。
保存できますよ。

やり方としては
保存:
 GetWindowPlacementしてWINDOWPLACEMENTのメンバ変数をすべて保存
復元:
 保存したファイルからWINDOWPLACEMENTのメンバ変数に設定
 SetWindowPlacementを実行
 ShowWindow(wndplace.showCmd);を実行 ←いらないかも

こんな感じでできると思うのですが?
    • good
    • 0
この回答へのお礼

たびたびどうもすみませんです。
GetWindowPlacementで出来ました。
rcNormalPosition変数に保存されてたんですね;;
よく考えたらそんな中途半端な関数作らないですよね。

完全に独学でやっているので知識不足や思い込みで
簡単なことにするのに何時間もかかってしまったりします。
あげく訳のわからんコードを書いて自己満足してたりして・・

ほんとにネットだけが頼りです(寂しいな)
おかげさまで簡単に保存することが出来ました

お礼日時:2001/11/03 12:07

メニューバーやタイトルバーの高さは


GetSystemMetricsで取得することはできますよ。

ただ、ウィンドウサイズの保存・復元は
ウィンドウを閉じるときに保存したほうがいいと思います。
あとサイズの保存・復元は、
GetWindowPlacementとSetWindowPlacementを使用すれば
メニューバーとかのサイズを気にしなくてすみます。

この回答への補足

GetWindowPlacementの存在には気づいてはいたんですが
WINDOWPLACEMENTは最大化とか最小化には対応できそうですが、ウィンドウの角を引っ張っての微妙なサイズ変更を保存することができないですよね??(本当か?)。
説明不足で申し訳ありませんです。
とりあえずGetSystemMetrics()で挑戦してみます。
これは知りませんでした(でもすごく重要そうな関数ですね・・)
あと保存は閉じるときにします。
Windowsプログラミングはいくらやっても判らないことだらけで・・

うまくいったら報告致します。
また、なんか勘違いしてたら突っ込んでください。
どうもありがとうございました。

補足日時:2001/11/03 00:18
    • good
    • 0
この回答へのお礼

GetWindowPlacementで解決できました。
ありがとうございました。

お礼日時:2001/11/03 12:11

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

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

Q雨降ると気温って下がるんでしょうか?

雨降るとその日の前後より気温が下がる傾向にあると思うんですが雨降るとやはり気温は下がるものなんでしょうか?

昨日も(東京)けっこう暑かったのに雨降った途端少し涼しくなったので気になりました。

Aベストアンサー

  こんばんは。

 確かに雨が降ると気温は下がります。

 それと、気温が高くて地面、都内でしたらアスファルトが熱せられて表面が熱くなっていますが、雨水で冷やされるのと、打ち水の原理で水が気化するときに周囲の熱を奪うので気温が下がって涼しくなるといういくつかの理由が重なって、涼しくなるということです。

 真夏の夕立ちの後はとても涼しくなるというのもその理由です。

Qこの”void(*m_pViewMode)(BYTE,BYTE,WORD);”このソースコードの意味は?

今、みているソースコードで次のようなコードがありました。


void(*m_pViewMode)(BYTE,BYTE,WORD);

--------(中略)----------------------------

m_pViewMode(err == 0 ? stKey.key : 0x00,clear,stKey.time);


全く何をどうやっているのかよくわからないのですが、これはC言語ではどのようなことをやっているソースコードなのでしょうか?

ご存じの方いらっしゃいましたらご教授お願いいたします。

Aベストアンサー

> void (*m_pViewMode)(BYTE,BYTE,WORD);
これは「関数へのポインタ」型の変数を宣言している。
m_pViewModeはBYTEとBYTEとWORDを引数に取り、返り値のない関数を保持するポインタ変数になる。

> m_pViewMode(err == 0 ? stKey.key : 0x00,clear,stKey.time);
ここでは、m_pViewModeに代入された関数を実行している。
「err == 0 ? stKey.key : 0x00」の部分が最初の引数で、三項演算子?:を用いてerrが0のときはstKey.keyを、それ以外では0x00を最初の引数にする。

Q雪が降らないと気温が下がる??

東北に住んでます。
夜中に除雪の仕事をしていていつも思うのですが、
雪がまったく降らない夜はいつもより温度が下がって寒くなります。
通常が、-2~4なのに対し、まったく降らないときは-7~10です。

雪が降らないと気温が下がるのでしょうか?それとも気温がかなり下がると雪が降らないんでしょうか?
どっちなのでしょう。
詳しく説明できるかた、おねがいします。

Aベストアンサー

雪雲が頭上に無い晴れた状態では、放射冷却で気温が下がります。

逆に雲がかかった状態では放射冷却は起き難いので気温低下にはつながりません。

その関係ではないでしょうか?

つまり・・・↓↓↓

雪が降らない=晴れて放射冷却が起きる=気温低下。

雪が降る=雪雲で覆われている=放射冷却が起きない=暖かい。

参考まで。

Qdc.TextOut(0 ,0 , *str) ;について

環境 WIN98 VC++6.0 MFC にて

パターンBはOKですが、パターンAだと不正な処理で落ちてしまいます。

どうしてなのかお教えください。

void CFffView::OnPaint()
{
CPaintDC dc(this);
//パターンA
CString* str ;
str = (CString*)("999");
dc.TextOut(0 ,0 , *str) ;

//パターンB
CString aaa ;
aaa = (CString)("999");
dc.TextOut(0 ,0 , aaa) ;
}

Aベストアンサー

両方ダメ。
Aのパターンで動くのは、たまたま。

CString aaa ;
aaa = "999";
dc.TextOut(0 ,0 , aaa) ;

これで十分。

あえてキャストするんだったら、
CString aaa ;
aaa = (LPCSTR)"999";
dc.TextOut(0 ,0 , aaa) ;


aaa=のところでは、ただの代入が行われているわけではありません。
オーバーロードされたオペレータが呼ばれています。


>str = (CString*)m_array.GetAt(i) ;

これは、m_arrayの要素にCString*を入れていて、初めて成り立つ式です。
値をいれているところと、m_arrayの宣言を確認してください。

str = (CString*)("999");
も、
aaa = (CString)("999");
も、リテラル文字列をつっこもうとしています。
リテラル文字列とCStringはまったく別物です。

Q太陽表面より温度が低い黒点が減ると、地球の気温が下がるのはなぜ?

太陽黒点がゼロになったというニュースを見ました。
太陽表面(6000K)よりも温度が低い太陽黒点(4000K)が減ると、
地球の気温が下がるのはなぜなのでしょうか?
直感的には逆で、黒点が減ると太陽表面温度が上がり
地球の気温も上がるように思うのですが・・・

Aベストアンサー

 衛星による観測結果として、黒点が多い時期の方が少ない時期と比べて、平均として太陽が明るいことがわかっています。太陽からの可視域での(以下、同じ)放射エネルギーの変動は、均してみれば0.2%程度です。

 大きな黒点が出れば、太陽の明るさは0.2%程度暗くなりますが、これはいわば"瞬間値"です。長い目で見れば、黒点が多い活動期には白斑も多く出ており、ここからのエネルギー放射が黒点によって抑えられる放射より大きく、このために黒点が多い時期の方が明るいのだろう、というのが現在の解釈です。

 さて、地球が楕円軌道を描いて太陽の周りを回っていることはご存知のことと思います。楕円であることにより、地球に届く太陽からの放射エネルギーはどれくらい変動するのでしょうか? 太陽3個分ほどの距離の変動がある、つまり3%ほど太陽-地球間の距離が変わりますから、放射エネルギーの変動は(太陽を中心とする球面の面積で効いてくるので)、ラフな計算で6%となります。太陽放射エネルギーの0.2%の変動はこれに比べたら話になりません。季節変動の方が、遙かに大きいのです。

 黒点が減ると地球の気温が下がる?・・・って、黒点が"少ない"期間としていったいどれくらいの年月を想定しての話なのでしょうか?

 ということで、数十年というようなよほど長い期間黒点が無かったりしない限り、地球の気温と黒点数との関係はあるかないかまったくわかっていないというのが実情です。

 ただし、紫外線やX線の放射量はかなり大きく変化しますから、このことによる変動はあるかもしれません。あくまでも"かもしれない"というだけで、黒点数と気候変動の関係はまだ解明されていないという理解が最も望ましい理解の仕方だと思います。

 衛星による観測結果として、黒点が多い時期の方が少ない時期と比べて、平均として太陽が明るいことがわかっています。太陽からの可視域での(以下、同じ)放射エネルギーの変動は、均してみれば0.2%程度です。

 大きな黒点が出れば、太陽の明るさは0.2%程度暗くなりますが、これはいわば"瞬間値"です。長い目で見れば、黒点が多い活動期には白斑も多く出ており、ここからのエネルギー放射が黒点によって抑えられる放射より大きく、このために黒点が多い時期の方が明るいのだろう、というのが現在の解釈で...続きを読む

Qint select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout)について

見当違いな質問かもしれませんがお願いします。

複数のソケットを監視する際にselectを使う場合のことですが、
selectの動作と戻り値について疑問があります。

http://www.linux.or.jp/JM/html/LDP_man-pages/man2/select.2.html
ここを参照すると、selectの戻り値は
「更新された 3 つのディスクリプタ集合に含まれているディスクリプタの数 (つまり、 readfds, writefds, exceptfds 中の 1 になっているビットの総数) を返す。」
とあります。
私の中でselectは登録してあるFDのうち、一つでも動きがあれば即座にselectを抜けるもの、という認識です。
この認識だとreadfds,writefdsが引数として与えられているとしても、
どちらかのfd_setのうち、一つでも動きがあればselect文は
抜けてしまうことになります。とすると、戻り値として
「readfds, writefds, exceptfds 中の 1 になっているビットの総数」
は常に1ということになってしまいます。しかし、総数というからには
複数同時に1になることもあるはずです。

私の認識が間違っているとは思うのですが、どう間違っているのかわかりません。
select文の動きについて詳しく教えていただけないでしょうか。
または良いページがあれば教えてください。

見当違いな質問かもしれませんがお願いします。

複数のソケットを監視する際にselectを使う場合のことですが、
selectの動作と戻り値について疑問があります。

http://www.linux.or.jp/JM/html/LDP_man-pages/man2/select.2.html
ここを参照すると、selectの戻り値は
「更新された 3 つのディスクリプタ集合に含まれているディスクリプタの数 (つまり、 readfds, writefds, exceptfds 中の 1 になっているビットの総数) を返す。」
とあります。
私の中でselectは登録してあるFDのうち、一つでも動きが...続きを読む

Aベストアンサー

>私の中でselectは登録してあるFDのうち、一つでも動きがあれば即座にselectを抜けるもの、という認識です。
この認識はあっています。
しかし、selectを呼び出す以前にOKになっているFDがあれば、それらは全てビットがONになります。

話しを簡単にする為に、受信のみのソケットを3つ作成したとします。
これらの3つのソケットに向けて相手が電文を送ったとします。
その状態でまだ、こちらはselectを呼び出さずにいます。しばらくしてから、selectを呼び出すと、selectは即座にリターンし、3つのビットが一度にONになっているはずです。
一方、相手が、一切電文を送ってない状態で、selectを呼び出した場合は、何れかのビットがONになればリターンするので、そのときは、貴方が想像しているように
ビットの総数は1になる可能性が高いです。
従って、相手が電文を送る前にselectを呼び出すか、送った後にselectを呼び出すかは、その時のタイミングにより異なります。従って、ビット数の総和が常に1であるとは、考えない方が無難です。(1つのソケットしか使用しない場合は別ですが・・・)

>私の中でselectは登録してあるFDのうち、一つでも動きがあれば即座にselectを抜けるもの、という認識です。
この認識はあっています。
しかし、selectを呼び出す以前にOKになっているFDがあれば、それらは全てビットがONになります。

話しを簡単にする為に、受信のみのソケットを3つ作成したとします。
これらの3つのソケットに向けて相手が電文を送ったとします。
その状態でまだ、こちらはselectを呼び出さずにいます。しばらくしてから、selectを呼び出すと、selectは即座にリターンし、3つのビ...続きを読む

Q気温が下がる頃から目が痛む

最近、パソコンの画面を見ていると、午後ぐらいから目が痛み出します。
午前中は感じません。
夏場は、目の痛みは全くないです。
秋の気温が下がる頃からです。
ドライアイの季節でもないと思います。

気温と目の痛みは関連があるのでしょうか?
また対処法を教えて下さい。

Aベストアンサー

お邪魔させていただきます。
考えられる病気
<ドライアイ>
目の乾燥によって涙が不足してしまい、角膜に傷をつけてしまいます。異物感やゴロつきなどの痛みが生じます。
ドライアイになる最初の原因は眼球表面の涙液の量が減ることですが、それには涙液の分泌の低下と、涙液の蒸発が多くなることの二つが影響しています。その背景として、次のような要因があげられます。
空気が乾燥していると、目の表面から涙液が蒸発しやすくなります。このためドライアイの人の多くは、秋から冬にかけての季節の変わりめに症状が強くなります。
本来は湿度が高い夏場も、エアコンの利いた部屋にいると目が乾きます。
<眼精疲労>
眼の奥に重い痛みを感じる事があります。疲れの原因は様々ですが、眼精疲労を訴える人の半分以上にドライアイの症状が併発していることがわかっています。
<緑内障>
眼球内の圧力(眼圧)が上がり視神経が侵され、視力低下や視野狭窄をおこします。急に眼圧が上がる急性の緑内障発作では眼の痛みに加え頭痛・吐き気などもあり、短時間で失明に繋がる可能性もある、早急な治療が必要な病気なのです。
緑内障は眼圧が高くことなることで視神経が圧迫され、それによって視野が狭くなるなど障害が起きる病気です。
眼圧は座っている時と寝ている時でも変化があるなど変動が多いのですが、季節によっても変化があります。特に冬には眼圧が上がる傾向にあり、注意が必要です。その理由は、眼圧の調整には自律神経が関与しているからだと言われています。気温が下がると体温を上げようと、自律神経の中の交感神経系が活発になり、興奮状態になり眼圧が上がるのではないかと考えられています。

対処法は
まず眼科に受診。適切な指導を受け治療(目薬の点眼)じゃないですか。
もし、緑内障だったら、失明する可能性もありますから。

お邪魔させていただきます。
考えられる病気
<ドライアイ>
目の乾燥によって涙が不足してしまい、角膜に傷をつけてしまいます。異物感やゴロつきなどの痛みが生じます。
ドライアイになる最初の原因は眼球表面の涙液の量が減ることですが、それには涙液の分泌の低下と、涙液の蒸発が多くなることの二つが影響しています。その背景として、次のような要因があげられます。
空気が乾燥していると、目の表面から涙液が蒸発しやすくなります。このためドライアイの人の多くは、秋から冬にかけての季節の変わりめに症...続きを読む

Qstruct tanka_kosuu kosuu[10];に付いているアンダーバー"_"の意味

以下のプログラムで質問がございます。
C言語の構造体であるstructの変数であるtanka_kosuuですが
アンダーバー"_"を付けてあります。
(※struct tanka_kosuu kosuu[10];)
 これは、なんでつける必要があるのですか!?
  ご教授ができるお方がおられましたらよろしくお願いいたします。

#include <stdio.h>
struct tanka_kosuu {
int tanka;
int kosuu;
int kingaku;
};
int goukei_kingaku(struct tanka_kosuu kosuu[], int nyuuryoku_kosuu);
int main()
{
struct tanka_kosuu kosuu[10];
struct tanka_kosuu kari_nyuuryoku = {-1, 0, 0};
int nyuuryoku_kosuu = 0;
int i;
while(kari_nyuuryoku.tanka != 0){
scanf("%d %d", &kari_nyuuryoku.tanka,
&kari_nyuuryoku.kosuu);
kosuu[nyuuryoku_kosuu] = kari_nyuuryoku;
nyuuryoku_kosuu++;
}
for ( i = 0; i < nyuuryoku_kosuu-1; i++ ){
kosuu[i].kingaku = kosuu[i].tanka * kosuu[i].kosuu;
printf("%d\t%d\t%d\n", kosuu[i].tanka,
kosuu[i].kosuu, kosuu[i].kingaku);
}
printf("goukei=%d\n",goukei_kingaku(kosuu, nyuuryoku_kosuu-1));
return 0;
}
int goukei_kingaku(struct tanka_kosuu kosuu[], int nyuuryoku_kosuu)
{
int i;
int goukei = 0;
for ( i = 0; i < nyuuryoku_kosuu; i++ ){
goukei += kosuu[i].kingaku;
}
return goukei;
}

以下のプログラムで質問がございます。
C言語の構造体であるstructの変数であるtanka_kosuuですが
アンダーバー"_"を付けてあります。
(※struct tanka_kosuu kosuu[10];)
 これは、なんでつける必要があるのですか!?
  ご教授ができるお方がおられましたらよろしくお願いいたします。

#include <stdio.h>
struct tanka_kosuu {
int tanka;
int kosuu;
int kingaku;
};
int goukei_kingaku(struct tanka_kosuu kosuu[], int nyuuryoku_kosuu);
int main()
{
struct tanka_kosuu kosuu[10...続きを読む

Aベストアンサー

変数や型などの識別名は、プログラム言語仕様により使用できる文字が制限されています。

多くの言語で空白文字は認められないので、複数の英単語からなる名前をつづる場合に
tankakosuu
では読みづらいので、以下の様な命名規則で単語間の区切りを表します。
tanka_kosuu // 下線で区切る "スネークケース"
tanka-kosuu // ハイフンで区切る "チェインケース"
tankaKosuu // 単語頭を大文字にする "キャメルケース"
TankaKosuu // 全ての単語頭を大文字にする "パスカルケース"
TANKA_KOSUU // 全て大文字で下線で区切る "アッパーケース"

C言語の構造体の場合ですが、
慣習として スネークケース または キャメルケース あたりが一般的な様です。

というわけで質問の回答としては、
そのプログラムを作った人の命名規則が、構造体名はスネークケースだった。

ちなみに、
言語仕様的に使えないチェインケースを除いて、どの命名規則でもコンパイルエラーになることはありません。
ただし、コンパイラーとは別に静的コード解析をしている場合は、変な命名だと警告されるかもしれません。


以下参考です。

慣習の由来はたぶんこれ
http://www.amazon.co.jp/dp/4320026926

命名規則が パスカルケース または アッパーケース の例
https://msdn.microsoft.com/ja-jp/library/kbt00480.aspx

言語によっては、この手の命名規則についての公式ガイドラインがあります
http://www.oracle.com/technetwork/java/codeconventions-135099.html
https://msdn.microsoft.com/ja-jp/library/ms229043.aspx

変数や型などの識別名は、プログラム言語仕様により使用できる文字が制限されています。

多くの言語で空白文字は認められないので、複数の英単語からなる名前をつづる場合に
tankakosuu
では読みづらいので、以下の様な命名規則で単語間の区切りを表します。
tanka_kosuu // 下線で区切る "スネークケース"
tanka-kosuu // ハイフンで区切る "チェインケース"
tankaKosuu // 単語頭を大文字にする "キャメルケース"
TankaKosuu // 全ての単語頭を大文字にする "パスカルケース"
TANKA_KOSUU // 全て大文字で下線...続きを読む

Qなぜ標高が高いほど気温が下がるの?

 大気圏外、例えば宇宙空間や月世界では日向の温度は凄く高いと聞きました。

 では大気圏内では何故、標高が高くなるにつれて気温が下がるのでしょうか

 単純に考えると太陽に近づくから暖かくなるって思うのですが、、

 『人生半ばにして、馬鹿か?』と思われるかもしれませんが、ご回答お願い致します。

Aベストアンサー

太陽に近い、遠いの前に気圧が関係しています。冬に缶コーヒーの蓋を開けないまま直火にかけると強烈な音とともに破裂してしまいます。これは缶の中の空気や水分が暖められて膨張し体積を増して缶の中の圧力が高くなった結果です。破裂する手前で缶を冷やしてやると中の空気が収縮し圧力は低くなる。逆に気圧を変えても同じことが起こります。気圧を高めれば温度が上がり、気圧を下げれば温度がさがります。(ボイル.シャルルの法則)
高い山に登ると気圧が下がるため100mにつき0.5度C下がります。1000mでは5度Cも下がることになってしまいます。

Qこのプログラムを見てください(C言語) m( _ _ )m

現在乱数を使ったプログラムを作っています。

下のプログラムでコンパイルではエラーがでませんが、実行するとデバッグエラーが出てきます。コンパイラにはbccを使っています。恐らく原因は別の関数でbに値を代入してそれをaに代入しているからだろうと思いますが、なぜこれがいけないのかが分かりません。


#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>

int ran, a=1, b, c;

void test(void){
b=8;
}
void main(){
srand(time(NULL));
a=b;//ここを無くすとなぜかエラーが出ない。
while(1){
ran=rand()%(a*2)+1;
switch(ran){
case 1: c=1; break;
case 2: c=1; break;
case 3: c=1; break;
case 4: c=2; break;
case 5: c=2; break;
case 6: c=3; break;
case 7: c=3; break;
case 8: c=4; break;
}
printf("%d",c);printf("何か押してください\n");getch();
}
}

現在乱数を使ったプログラムを作っています。

下のプログラムでコンパイルではエラーがでませんが、実行するとデバッグエラーが出てきます。コンパイラにはbccを使っています。恐らく原因は別の関数でbに値を代入してそれをaに代入しているからだろうと思いますが、なぜこれがいけないのかが分かりません。


#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>

int ran, a=1, b, c;

void test(void){
b=8;
}
void main(){
srand(time(NULL));
a=b;//ここを無く...続きを読む

Aベストアンサー

a=b

の実行時に変数bが参照されますが、

値が不定です。

test()がa=b以前に実行されていればOKです。


人気Q&Aランキング

おすすめ情報