ページ 11

DXライブラリで.....

Posted: 2012年5月05日(土) 07:43
by 紫電
c言語についてですが、ファイルを開く時にファイルを開くダイアログをだしたいんです。
でも、やり方が見つからないんです。もしかしたら出来ないかもしれませんがどうか回答お願いします!m(_ _)m

Re: DXライブラリで.....

Posted: 2012年5月05日(土) 07:58
by 華風えくれあ
こちらの方にWin32APIを使用した「開く・名前を付けて保存」ダイアログのサンプルがありましたので、
こちらを参考にしてみてはいかがでしょうか。

丸々とるのはいいとは思えませんが…。
http://homepage1.nifty.com/MADIA/vc/api/

Re: DXライブラリで.....

Posted: 2012年5月05日(土) 08:03
by 紫電です
DXライブラリとの共有はできるんですか?
回答お願いします!

Re: DXライブラリで.....

Posted: 2012年5月05日(土) 08:06
by みけCAT
コンパイルしていない上、フルスクリーンだと使えないかもしれませんが、
この関数でどうでしょうか?

コード:

int getFileName(char* fileName,int fileNameLength,
		const char* fileFilter) {
	OPENFILENAME ofn;
	ZeroMemory(&ofn,sizeof(ofn));
	ofn.lStructSize=sizeof(ofn);
	ofn.hwndOwner=GetMainWindowHandle();
	ofn.lpstrFilter=fileFilter;
	ofn.nFilterIndex=0;
	ofn.lpstrFile=fileName;
	ofn.nMaxFile=fileNameLength;
	ofn.Flags=OFN_CREATEPROMPT | OFN_HIDEREADONLY | OFN_NOCHANGEDIR;
	if(fileName==NULL)return 0;
	if(fileFilter==NULL)ofn.lpstrFilter="すべてのファイル(*.*)\0*.*\0\0";
	fileName[0]=0;
	return GetOpenFileName(&ofn);
}
fileNameに選択したファイル名を格納するバッファへのポインタを格納します。
fileNameLengthにファイル名を格納するバッファのサイズを格納します。
fileFilterには、ファイル名のフィルターを以下の形式での文字列で指定します。

コード:

(1個目のフィルターとして表示する文字列)\0(1個目のフィルターで表示する拡張子)\0
(2個目のフィルターとして表示する文字列)\0(2個目のフィルターで表示する拡張子)\0
・・・
(n個目のフィルターとして表示する文字列)\0(n個目のフィルターで表示する拡張子)\0\0
※実際には改行せず、1行で指定してください

こんな感じでどうでしょうか?

追記
関数を少し修正しました。
DXライブラリと組み合わせての動作も確認しました。

コード:

#include <DxLib.h>

//上の関数を貼り付ける

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
	if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //初期化処理
	
	char filename[256];
	if(getFileName(filename,sizeof(filename),NULL)) {
		DrawString( 100 , 100 , filename , GetColor(255,255,255) ) ;
	} else {
		DrawString( 100 , 100 , "error" , GetColor(255,0,0) ) ;
	}
	
	WaitKey();

	DxLib_End();
	return 0;
}

Re: DXライブラリで.....

Posted: 2012年5月05日(土) 08:45
by さっきのものです
なぜかエラーが100件を超えました....
なぜでしょうか....
なんか、上の関数のとこでエラー吐きます....一応
描いたソース↓

コード:


int getFileName(char* fileName,int fileNameLength,
        const char* fileFilter) {
    OPENFILENAME ofn;
    ZeroMemory(&ofn,sizeof(ofn));
    ofn.lStructSize=sizeof(ofn);
    ofn.hwndOwner=GetMainWindowHandle();
    ofn.lpstrFilter=fileFilter;
    ofn.nFilterIndex=0;
    ofn.lpstrFile=fileName;
    ofn.nMaxFile=fileNameLength;
    ofn.Flags=OFN_CREATEPROMPT | OFN_HIDEREADONLY | OFN_NOCHANGEDIR;
    if(fileName==NULL)return 0;
    if(fileFilter==NULL)ofn.lpstrFilter="すべてのファイル(*.*)\0*.*\0\0";
    fileName[0]=0;
    return GetOpenFileName(&ofn);
}
#include <DxLib.h>
 
//上の関数を貼り付ける
 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
    if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //初期化処理
    
    char filename[256];
    if(getFileName(filename,sizeof(filename),NULL)) {
        DrawString( 100 , 100 , filename , GetColor(255,255,255) ) ;
    } else {
        DrawString( 100 , 100 , "error" , GetColor(255,0,0) ) ;
    }
    
    WaitKey();
 
    DxLib_End();
    return 0;
}

 

描き間違えましたw

Posted: 2012年5月05日(土) 08:52
by 紫電
さっきのものです さんが書きました:なぜかエラーが100件を超えました....
なぜでしょうか....
なんか、上の関数のとこでエラー吐きます....一応
描いたソース↓

コード:



#include <DxLib.h>
 int getFileName(char* fileName,int fileNameLength,
        const char* fileFilter) {
    OPENFILENAME ofn;
    ZeroMemory(&ofn,sizeof(ofn));
    ofn.lStructSize=sizeof(ofn);
    ofn.hwndOwner=GetMainWindowHandle();
    ofn.lpstrFilter=fileFilter;
    ofn.nFilterIndex=0;
    ofn.lpstrFile=fileName;
    ofn.nMaxFile=fileNameLength;
    ofn.Flags=OFN_CREATEPROMPT | OFN_HIDEREADONLY | OFN_NOCHANGEDIR;
    if(fileName==NULL)return 0;
    if(fileFilter==NULL)ofn.lpstrFilter="すべてのファイル(*.*)\0*.*\0\0";
    fileName[0]=0;
    return GetOpenFileName(&ofn);
}
//上の関数を貼り付ける
 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
    if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //初期化処理
    
    char filename[256];
    if(getFileName(filename,sizeof(filename),NULL)) {
        DrawString( 100 , 100 , filename , GetColor(255,255,255) ) ;
    } else {
        DrawString( 100 , 100 , "error" , GetColor(255,0,0) ) ;
    }
    
    WaitKey();
 
    DxLib_End();
    return 0;
}

 

Re: DXライブラリで.....

Posted: 2012年5月05日(土) 09:17
by みけCAT
書く順番が違います。
こうしてください。

コード:

#include <DxLib.h>

int getFileName(char* fileName,int fileNameLength,
		const char* fileFilter) {
	OPENFILENAME ofn;
	ZeroMemory(&ofn,sizeof(ofn));
	ofn.lStructSize=sizeof(ofn);
	ofn.hwndOwner=GetMainWindowHandle();
	ofn.lpstrFilter=fileFilter;
	ofn.nFilterIndex=0;
	ofn.lpstrFile=fileName;
	ofn.nMaxFile=fileNameLength;
	ofn.Flags=OFN_CREATEPROMPT | OFN_HIDEREADONLY | OFN_NOCHANGEDIR;
	if(fileName==NULL)return 0;
	if(fileFilter==NULL)ofn.lpstrFilter="すべてのファイル(*.*)\0*.*\0\0";
	fileName[0]=0;
	return GetOpenFileName(&ofn);
}

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
	if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //初期化処理
	
	char filename[256];
	if(getFileName(filename,sizeof(filename),NULL)) {
		DrawString( 100 , 100 , filename , GetColor(255,255,255) ) ;
	} else {
		DrawString( 100 , 100 , "error" , GetColor(255,0,0) ) ;
	}
	
	WaitKey();

	DxLib_End();
	return 0;
}

Re: DXライブラリで.....

Posted: 2012年5月05日(土) 09:22
by (´· ω · `)
なりました!!
あと、名前を付けて保存するダイアログのソースもいまいちわからないので、そっちのソースもおしえていただけませんか?

Re: DXライブラリで.....

Posted: 2012年5月05日(土) 09:24
by みけCAT
名前は統一してください。フォーラムルールです。

コード:

int getFileNameForSave(char* fileName,int fileNameLength,
		const char* fileFilter) {
	OPENFILENAME ofn;
	ZeroMemory(&ofn,sizeof(ofn));
	ofn.lStructSize=sizeof(ofn);
	ofn.hwndOwner=GetMainWindowHandle();
	ofn.lpstrFilter=fileFilter;
	ofn.nFilterIndex=0;
	ofn.lpstrFile=fileName;
	ofn.nMaxFile=fileNameLength;
	ofn.Flags=OFN_HIDEREADONLY | OFN_NOCHANGEDIR | OFN_OVERWRITEPROMPT;
	if(fileName==NULL)return 0;
	if(fileFilter==NULL)ofn.lpstrFilter="すべてのファイル(*.*)\0*.*\0\0";
	fileName[0]=0;
	return GetSaveFileName(&ofn);
}
引数の説明はさっきと同じです。

Re: DXライブラリで.....

Posted: 2012年5月05日(土) 09:26
by 紫電
すいません、なぜかログインができなくて....

ありがとうございます!
and今後気をつけます!

Re: DXライブラリで.....

Posted: 2012年5月05日(土) 09:27
by 紫電
すいません、なぜかログインができなくて....

ありがとうございます!
and今後気をつけます!

Re: DXライブラリで.....

Posted: 2012年5月05日(土) 09:31
by みけCAT
解決したら、解決チェックをお願いします。

Re: DXライブラリで.....

Posted: 2012年5月05日(土) 09:39
by 紫電
本当に感謝ですw
解決しました!!
いろいろ解らなかったけど、ちゃんと理解でききました!ありがとうございました