Quantcast
Channel: OKWAVE 最新質問([技術者向] コンピューター/205)【本日】
Viewing all articles
Browse latest Browse all 38062

「ファイルを保存するコモンダイアログ」と「クラス」

$
0
0
c++を勉強しています。APIを使っているのですが、ファイル保存コモンダイアログの表示は出来ているのですが、ちょっと疑問点があります。どなたかご教授ください。よろしくお願いいたします。 分かりにくかったらごめんなさい。 とりあえず必要かなと思うところだけ編集して、ソースを張っています。 Save関数の中で static で宣言するとよいのですが、static無ではダイアログが動きません。 なぜstaticが必要なのですか? Save関数の中に入ると、クラスを作り、抜けると破棄するというようにと思っていたのですが static を付けてしまうと、ずっと保持されてしまいますよね? どうすれば、よいのでしょうか? 開発環境 vista visual studio 2010 c++ /********************/ class FNameDlg  //コモンダイアログのためのもの {   public:     int SaveFile( winproc proc );  //ダイアログを開く     void ofnSet( winproc proc, wchar_t *Filter, wchar_t *Title, wchar_t *Ext ); private:     TCHAR m_strName_full[MAX_PATH];     TCHAR m_strName[MAX_PATH];    OPENFILENAME m_ofn; }; /************/ class WaveSave  : public FNameDlg //wavファイルを保存するため {   public:     void SaveMain( winproc proc, Audio_Format hWave, Save cSave );   private:     void WriteFile(LPTSTR lpszFileName, LPWAVEFORMATEX lpwf, LPBYTE lpWaveData, DWORD dwDataSize);    }; /*********/ void WaveSave::SaveMain( winproc proc, Audio_Format hWave, Save cSave ) {    wchar_t *FilterW = _T("wav files( *.wav )\0*.wav\0All files(*.*)\0.*.*\0\0");    wchar_t *TitleW = _T("名前を付けて保存");    wchar_t *ExtW = _T("wav");    ofnSet( proc, FilterW, TitleW, ExtW );  //OPENFILENAMEに値を入れます    if( SaveFile( proc ) == -1 ) //ここでGetSaveFileName( &m_ofn )を実行しています。       return ;          //staticを付けてないと返されてしまいます。    WriteFile( GetFull(), &hWave.m_Wf, cSave.m_pbSave, cSave.m_iDataSize ); } /*************/ void Save( // 省略します // ) {    static WaveSave cWSave; //staticを付けるとよい ないとだめ     cWSave.SaveMain( proc, hWave, cSave ); } /*************/ LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {     //  省略します  //     Save( // 省略します // );    return DefWindowProc(hwnd, uMsg, wParam, lParam); }

Viewing all articles
Browse latest Browse all 38062

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>