いつもお世話になります。

指定場所のINIファイルにウィンドウが閉じられた時の
座標位置を保存しようとしています。

API関数をMFCの中で用いたいのですが、現時点の知識量では
下記程度のソースしか思い浮かびません。
ネット上などいろいろ調べてみたのですが、
わからずじまいです。
ご教授よろしくお願い致します。

開発環境はVC++6.0MFCです。

CRect q;
GetWindowRect(&q);

WritePrivateProfileString("PROGRAMDATA", "WindowPlaceL", q.left,"INIファイルへのフルパス");
WritePrivateProfileString("PROGRAMDATA", "WindowPlaceT", q.top,"INIファイルへのフルパス");

A 回答 (1件)

WritePrivateProfileString() APIでINIファイルに書き込むことが出来ます。


読み込むときはGetPrivateProfileString()及びGetPrivateProfileInt()です。
このAPIは文字列を書き込む関数なので
3番目の引数を文字列へのポインタを指定してあげないといけません。
以下のような感じになります。
MFCは使ってないので、必要な部分はMFCに置き換えてください。

CHAR szWork[16];
RECT rc;
HWND hwnd;

ZeroMemory( szWork, sizeof( szWork ) );
GetWindowRect( hwnd, &rc );

wsprintf( szWork, "%d", rc.left );
WritePrivateProfileString( "Position", "Left", szWork, ".\\foo.ini" );
wsprintf( szWork, "%d", rc.top );
WritePrivateProfileString( "Position", "Top", szWork, ".\\foo.ini" );
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています

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

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

Q「古い圧縮ファイル」の確認方法

Dドライブのディスクのクリーンアップをしたいのですが、実行できるものが、「古い圧縮ファイル」の削除しかありません。

「古い圧縮ファイル」がどのプログラムかを確認する方法を教えてください。

また、圧縮されたファイルの名前は青くなるらしいのですが、見つかりません。どうしてでしょうか
圧縮ファイルは1G弱あります。

Aベストアンサー

http://www.atmarkit.co.jp/fwin2k/win2ktips/106cleanup/106cleanup.html

初期設定では、50日以上アクセスの無かったファイルに対して、圧縮が行われます。
当然、圧縮してからでないと、ファイル名は青色にはなりませんので、ディスク・クリーンアップでの候補段階では、黒色のままです。


尚、設定によっては青色表示にならない場合も有りますけど。

http://121ware.com/qasearch/1007/app/nec.jsp?005084

Qint i,j; \n i=0,j=5;

int i,j;
i=0;
j=5:
と書いてあるソースは普通ですが、
int i,j;
i=0,j=5:
と書いてあるソースもあります。
後者はC++の正しい書式ですか?

カンマ演算子というのは後者のカンマのことですか?

Aベストアンサー

 正しい書式です。

i=0,j=5;
 における、「,」をカンマ演算子といいます。2項の演算子です。カンマで区切られた演算を「左から順番に」実行し、最後の演算を結果として返します。
 したがって、例の文であれば、i=0を実行し、次にj=5を実行。そして、j=5の結果の5を結果として返します。
 ・・・
 が、本来的には、あまり、例のような使い方はしませんね。よく見られるのは、次のような場合です。

 for (i=0,j=0 ; i < 50 ; ++i,++j) {

 のような形でよく見られます。for文の各式は、一つの式でなければならないので、こんな書き方をするわけです。初期化と更新部が一つにまとまり、ループが読みやすくなるのが利点かな。

Qファイルの圧縮方法

AVIやMPGの画像ファイルを圧縮する方法を教えてください。900mb位のファイルをCD-Rに落とし込める700mbまで圧縮したいんですが。できれば、zipやlzhなどの後で解凍しなくてはいけないような圧縮方法ではなく、多少画像が荒くなってもファイルを単純に縮小させるような方法を教えていただけると有り難いのですが。。
因みに、TMPGEncを試してみたんですが、どうもうまくいかなくて。。ファイルサイズが元のファイルより逆に大きくなってしまうんです。
すいませんが、宜しくお願いします。

Aベストアンサー

画像圧縮?くす(^^
エンコはTMPGEncやaviutlでやるのがふつーです。
ええ 絶対! 
aviutl
http://ruriruri.zone.ne.jp/aviutl/

zipとかで圧縮しても意味ありません サイズ的に。

で、TMPGEncで元より大きくなるのは問題は
コーデック、画像サイズ、 音声ファイルなど
理由はいっぱいあります。対処は類似質問みて↓
http://oshiete1.goo.ne.jp/kotaeru.php3?q=625581

だから圧縮というか再エンコードが面倒なら
ファイルをテキトーな部分でカットする方向性はどお?
CD-R 2枚に保存 450 450 くらいでカット。
対処は類似質問みて↓
http://oshiete1.goo.ne.jp/kotaeru.php3?q=610331
ではでは!

追伸
カンタンにならrmファイルに変更かなあ
でも画質は落ちますよ
ネット配信 ストリーミング形式でどぞ!
RealplusG2とかRealEncoderで変換
でもaviでもないしmpegでもないですけど、どお?

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=610331

画像圧縮?くす(^^
エンコはTMPGEncやaviutlでやるのがふつーです。
ええ 絶対! 
aviutl
http://ruriruri.zone.ne.jp/aviutl/

zipとかで圧縮しても意味ありません サイズ的に。

で、TMPGEncで元より大きくなるのは問題は
コーデック、画像サイズ、 音声ファイルなど
理由はいっぱいあります。対処は類似質問みて↓
http://oshiete1.goo.ne.jp/kotaeru.php3?q=625581

だから圧縮というか再エンコードが面倒なら
ファイルをテキトーな部分でカットする方向性はどお?
CD-R 2枚に保存 450...続きを読む

QMFC,C++/CLI,C#の共存

CCDカメラからの画像を画像処理ボード(MV-10というボードです)で受け取り、そのデータを使ったWindowsプログラムを開発したいと考えています。
開発はVisual C# 2005か Visual C++ 2005(C++/CLI)で行いたい(理想としては、フォームなど外観はC#、内部処理はC++)のですが、画像処理ボードのライブラリがMFCとなっていました。
色々と調べて、MFCとC++/CLIを共存させることが出来るらしく、またC#とC++/CLIを共存させることも出来るらしいと言うことが分かったのですが、具体多的な方法が分かりません。

具体的な方法が記述されている書籍や、ウェブサイトなどがありましたら、教えていただきたいです。

Aベストアンサー

下記URLにヒントがありそうです。

参考URL:http://www.wankuma.com/seminar/200708TechEd/Default.aspx

Qファイルの圧縮方法が解りません

窓の杜やベクター等に置かれている、フリーの圧縮、解凍ソフトをダウンロードしていますが、テキストファイルや、画像ファイルの圧縮方法が解りません。何方か教えて頂けませんか?

Aベストアンサー

ソフトの開発者のサイトで質問することをお奨めします。

ソフトごとに操作方法が異なりますので、使用しているソフト名すらない状態では誰も必要とする回答を出せません。

窓の杜やベクターでは開発者のサイトへのリンクがありますから、そこからアクセスできますよ。

QC#,C++/CLI,MFCにおけるデータ型の対応と、メソッドへの渡し方

現在、Visual Studio 2005の、Visual C#、C++/CLI、MFCを使ったシステムを構築しています。
具体的には、MFCで書かれたライブラリ(DLL)をC++/CLIでラップし、C#から呼び出して使うというものです。
現在は、http://www.atmarkit.co.jp/fdotnet/special/vcppinvista02/vcppinvista02_04.html
http://msdn2.microsoft.com/ja-jp/library/ac7ay120(VS.80).aspx
これらのサイトを参考にしながら、一部のMFCで書かれたメソッドを、C#から呼び出すことに成功しました。しかし、int型やHANDLE型などの、上記サイトに記述されているデータ型を用いたメソッドのラッピングや呼び出しはできたのですが、HDCやLPRECTなどの特殊な型の場合のやり方がよく分かりません。

具体的に現在分からないのは、次の通りです。
HDC(デバイスコンテキスト)、HWND(ウィンドウのハンドル)、CIRCLE,RECT等の構造体、LPRECTなどの構造体のアドレス、POINT*などの構造体のポインタ
これらが、C#やCLIでどのような型になるのか、メソッドに渡す時にどのように記述するのかが分かりません。

以上、どなたか分かる方いらっしゃいましたら、ご回答をお願いします。

現在、Visual Studio 2005の、Visual C#、C++/CLI、MFCを使ったシステムを構築しています。
具体的には、MFCで書かれたライブラリ(DLL)をC++/CLIでラップし、C#から呼び出して使うというものです。
現在は、http://www.atmarkit.co.jp/fdotnet/special/vcppinvista02/vcppinvista02_04.html
http://msdn2.microsoft.com/ja-jp/library/ac7ay120(VS.80).aspx
これらのサイトを参考にしながら、一部のMFCで書かれたメソッドを、C#から呼び出すことに成功しました。しかし、int型やHANDLE型などの、上記サイトに...続きを読む

Aベストアンサー

> DLLのリンクはIJW機構というものを使用して

そのようですね、勉強不足で申し訳ありません。

>>    RECT lprcDC, lprcDib;
>
>>    return dllfunction(hDC, lprcDC, hDib, lprcDib);
> --------------------------------------------------------------
> この記述ですと、lprcDCとlprcDibがポインタに変換されていないと思う
> のですが、これは記述ミスでしょうか?

DllImport でマネージドとアンマネージドに変換されるので構造体を含め
C++/CLI のマネージドコードで記述してます。

# 他のと同じように lp- というプリフィクスにしたのが誤解を招いたかも
# 知れないです。

念のために拙いコードなのですが、 C# の GUI でコードを書いて動作
確認をしてみました。

TestDll.dll 側の関数実装には TextDraw と Bitblt を記述して任意の
文字列を bmp1(C#) の HDC に描画して bmp2(C#) の HDC には Bitblt で
bmp1(C#) の HDC を反転したものを転送するようにしました。
TextDraw と BitBlt のどちらかで失敗した場合はその時点で FALSE を
返すようになっています。

HANDLE は void* の typdef なので HDC にキャストしました。
TestDll.dll にポインタが確実に渡っているか調べるのだけならそれで
問題ないのではないかと思いましたので。

------------- 呼出用プログラム(C#) --------------
// PictureBox サイズの Bitmap を作成
Bitmap bmp1 = new Bitmap(pictureBox1.ClientSize.Width,
             pictureBox1.ClientSize.Height);
Bitmap bmp2 = new Bitmap(pictureBox2.ClientSize.Width,
             pictureBox2.ClientSize.Height);

// Bitmap から Graphics を得る
Graphics g1 = Graphics.FromImage(bmp1);
Graphics g2 = Graphics.FromImage(bmp2);

// Graphics から HDC を得る
IntPtr hDC = g1.GetHdc();
IntPtr hDBI = g2.GetHdc();

// DLL 呼び出し
if (!wrapper.function(hDC, pictureBox1.ClientRectangle,
            hDBI, pictureBox2.ClientRectangle)
  )
    MessageBox.Show("失敗");

// PictureBox へ描画
pictureBox1.Image = bmp1;
pictureBox2.Image = bmp2;
g1.ReleaseHdc();
g2.ReleaseHdc();

その他の部分は ANo.2 に記述したものと同じです。
----------------------------------------------------

それと、一点お尋ねしたいのですが

>  BOOL result = Mvc10_PaintDIB( (HDC)hDC.ToPointer(), LPrcDC , (HANDLE)hDib.ToInt32(), LPrcDib );

HANDLE は typedef void* かと思うのですが hDib.ToInt32() として
hDib.ToPointer() としてないのは何か理由があってのことでしょうか?

# こちらで試したところ ToPointer() でも ToInt32() でも動作する
# ようですし、立ち入ったことであれば申し訳ないですので、流して
# ください。

> 実際に使用してみての結果は後日報告させていただきたいと思います。

無事に動作されることをお祈りいたします。
自己解決されておられるようで、お役に立てなくて申し訳ありませんでした。

> DLLのリンクはIJW機構というものを使用して

そのようですね、勉強不足で申し訳ありません。

>>    RECT lprcDC, lprcDib;
>
>>    return dllfunction(hDC, lprcDC, hDib, lprcDib);
> --------------------------------------------------------------
> この記述ですと、lprcDCとlprcDibがポインタに変換されていないと思う
> のですが、これは記述ミスでしょうか?

DllImport でマネージドとアンマネージドに変換されるので構造体を含め
C++/CLI のマネージドコードで記述してます。...続きを読む

Qpsdファイルの圧縮方法

psdファイルの圧縮方法を教えてください。(基本的質問で恐縮ですが)
win98です。なお、ファイルは9MB程度ですが、圧縮したものを解凍する際、鮮明度が落ちずに元通りの画像で開けますでしょうか?

Aベストアンサー

●大きなサイズのファイルを分割して送付

+Lhaca 1.20 デラックス版での分割方法
http://park8.wakwak.com/~app/Lhaca/

 1. インストールは、ダウンロードした Lhaca120.exe を実行する。
 2. デスクトップに作成された +Lhaca のショートカットに、
   対象のファイルをALTキーを押しながらドロップする。
 3. 保存場所を聞いてくるので、望みの場所を指定する。
   (圧縮形式は、相手が解凍できる形式を選ぶ。)
 4. 分割されたファイル群と結合用のバッチファイルが作成される。
   (デフォルトでは 1.2MB を上限として分割される。)
   (このサイズは +Lhaca で変更できる。)
 5. (4)のファイル全てを、容量を超えないようにメールに添付して送信
   する。
   (添付ファイル総数を本文に明記すること。)
 6. 受け取った側は、全ての添付ファイルを一箇所に集めて、バッチファ
   イルを実行する。
   (操作手順は、本文に明記すること。)
 7. 分割されたファイルが結合されるので、結合された圧縮ファイルを解
   凍する。
 8. 9MBのファイルが解凍されるので、作業する。


これでどうかな!?

※他の圧縮ソフトも分割機能が備わっていると思うが・・・

●大きなサイズのファイルを分割して送付

+Lhaca 1.20 デラックス版での分割方法
http://park8.wakwak.com/~app/Lhaca/

 1. インストールは、ダウンロードした Lhaca120.exe を実行する。
 2. デスクトップに作成された +Lhaca のショートカットに、
   対象のファイルをALTキーを押しながらドロップする。
 3. 保存場所を聞いてくるので、望みの場所を指定する。
   (圧縮形式は、相手が解凍できる形式を選ぶ。)
 4. 分割されたファイル群と結合用のバッチファイルが作成される。
   (...続きを読む

Qprintf( " %2d", p * q );

以下のプログラムは算数の九九を表示させるプログラムです。
 
#include <stdio.h>
int main()
{
int p, q;

for( p = 1 ; p <= 9 ; p++ ){
for( q = 1 ; q <= 9 ; q++ )
printf( " %2d", p * q );

printf( "\n" );
}

return 0;
}
 以上のプログラムの中に「printf( " %2d", p * q );」とあります。 
%2dは何を表しているのか分かりません?
 (マス目みたいに縦9行、横9列きれいにそろうのも不思議なのですが?
   これは次回の質問に回します。)
よろしくお願いいたします。

Aベストアンサー

プログラムが動いているようですので、試してみればいいと思います。


 ・%2d
 ・%02d
 ・%d
 ・%4d
 ・%04d

上記5通りくらい試して出力を比較すれば、

> (マス目みたいに縦9行、横9列きれいにそろうのも不思議なのですが?
>   これは次回の質問に回します。)

この疑問の答えも出てくるでしょう。

どうでしょうか。

QNTFS圧縮したファイルを全部まとめて戻す方法

NTFS圧縮したファイルをプロパティからひとつひとつチェックをはずして戻すのではなく、圧縮されたファイルを全部まとめて元に戻す方法ってあるのでしょうか?

Aベストアンサー

圧縮を解除したいファイルを全て選択した状態で
→プロパティ→NTFS圧縮のチェックを外す→OK

それらのファイルがフォルダに入っているなら
フォルダのプロパティからやってもいい。
(サブフォルダにも適用するか尋ねられるからOKにする)

QSendMessage(hW,WM_CREATE,0,0);を

SendMessage(hW,WM_CREATE,0,0);
を実行するとシステムがWM_DOWNやWM_CHARを発行しなくなるみたいです
というのはそれ以降キー入力を無視するようになるのです
いったんアプリをアイコン化してウィンドウ化するとWM_DOWNやWM_CHARを発行するようになります
WM_CREATEを送ってもWM_DOWNやWM_CHARを発行しなくなるのを阻止するために何か方法はないでしょうか?

Aベストアンサー

>プログラムのイニシャライズのために送ったのですが送らないで住むプログラムに変更しました

普通はそんな方法はとりません。
システムが何をするか分からないからです。

自分でメッセージを定義して、初期化処理を行うようするためのメッセージを送るほうが無難です。
WM_CREATEと同じ処理を初期化処理として行わせたいのであれば、初期化処理を関数化して自分で定義したメッセージでも呼び出せばいいのですし。


>作ったプッシュボタンを押してシステムがWM_COMMANDを送ってきた後キー関係のメッセージを送ってくれなくなります

プッシュボタンがキーボードフォーカスを持ってのるでは?

ボタンがキーボードフォーカスを持っていてもキー関連のメッセージを親ウィンドウが受け取りたいのであれば、サブクラス化をするしかないでしょう。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報