• ベストアンサー

Windows APIのGetOpenFileNameで呼び出せるダイアログを改造できないでしょうか?

添付という形にすると勝手に再変換されて画像がかなり見づらくなってしまうようなので 添付ではなく別途アップへのリンクとさせてください。 今のところVC++2008EEを使ってWindows XPでアプリケーションを開発しています。 よほどメモリの断片化が進むような長時間使用しなければ .NET FrameWorkを完全に使用せず全部ネイティブで組んだほうが、実行時については 様々な面でパフォーマンスが良い場合が多いようなので できればマネージコード0でアプリケーションを完成させたいのですが Windows APIと.NET Frameworkにおいて、様々な場面で「デフォルトのデザインが違う」ようです。 簡単なものなら自作したりコモンコントロールにSendMessageやプロシージャをフックしたりでいいと思ったのですが オープン(セーブ)ファイルダイアログは、通常商用ソフトとかだと1から自作する事があるようなものなのでしょうか? http://www.geocities.jp/shank_long7_02/FileDialog/a.html こちらの画像の一番上がWindowsAPIのGetOpenFileNameで呼び出したダイアログで 真ん中がマネージなSystem::Windows::Formsの OpenFileDialogの場合で 一番下はPhotoshop CS3の別名保存用ダイアログです。 見たところこれは上がSaveFileDialogと一致してて、その下がカスタマイズされてるような感じですね。 現状のWindowsAPIを上記SendMessageやプロシージャのフックなどでちょこちょこっといじって.NET的なデザインにしたり、Photoshopのやつみたいにサイズを変えてその下に自分で好きな物を付け加えたりといったことは可能なのでしょうか? それとも、そういったことをやろうとした場合は1から作るか、混在させるかしかないのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.1

WinAPIと.NET Frameworkで、表示形式(アイコンと一部の背景)が違うのがよくわかりませんが… Photoshop CS3の様にコントロールを追加することは可能です。 「カスタムコモンダイアログ」等で検索すると、情報が得られるでしょう。 http://hp.vector.co.jp/authors/VA016117/esccd.html など。

LongSecret
質問者

お礼

ありがとうございます。 そっちが解決できれば機能的には申し分ないのですが 色々やってみてうまくいかず、最終的には丸々リンク先のコードと同じようにしても、リソースからの読み込みがなぜかうまくいきません。 VC++2008EEはリソースエディタが使えないこととか 以前アイコンがリソースを使った場合2つ以上読み込めなかったことなどと関係があるかもしれませんが、メニューは必ずうまくいくし、仮にWS_CHILDを外したうえでDialogBox関数を呼び出すとちゃんと出てくるので 生成自体は成功しているはずなのですが… 何か間違えているのでしょうか? resource.h内で #define IDD_ABCDIALOG1 4010 #define IDC_BUTTON1 4011 こうやって RC内で #include "resource.h" #include <winresrc.h> IDD_ABCDIALOG1 DIALOG DISCARDABLE 0, 0, 187, 94 STYLE WS_CHILD | WS_VISIBLE |DS_3DLOOK | DS_CONTROL | WS_CLIPSIBLINGS FONT 9, "MS Pゴシック"{ PUSHBUTTON "Button",IDC_BUTTON1,54,56,75,23 LTEXT "",1119,0,0,186,49, WS_CHILD |WS_GROUP } こうやって あとはopがOPENFILENAMEとして、変更部分を op.Flags = OFN_SHOWHELP| OFN_HIDEREADONLY |OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST |OFN_EXPLORER |OFN_ENABLESIZING |OFN_ENABLEHOOK |OFN_ENABLETEMPLATE; op.lpfnHook = OFNHookProc; op.lpTemplateName = MAKEINTRESOURCE(IDD_ABCDIALOG1); とし、プロシージャも全く同じように作って GetOpenFileNameを呼び出したとき、必ず失敗してしまいます。 CommDlgExtendedErrorを使って拡張エラーコードを調べると、常にCDERR_NOHINSTANCEになっています。 HINSTANCEはほかの場所で全て正常に機能しているものを指定していますし、OFN_ENABLETEMPLATEとlpTemplateNameへの代入箇所をコメントアウトすれば、普通の状態のオープンファイルダイアログは正常に表示されます。 リソース側の書き方が問題なのでしょうか?

その他の回答 (3)

  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.4

って、 >LTEXT "",1119,0,0,186,49, WS_CHILD |WS_GROUP で入れていた…んですな。 そうなると……リソースの書式なんでしょうかね? ResEditでリソース作り直してみてはどうでしょう? http://www.forest.impress.co.jp/lib/stdy/program/progsupt/resedit.html

LongSecret
質問者

お礼

あ、すみませんw 念のためにじっくりチェックしながら長文書いてたので、タイミングがずれましたねw ありがとうございます。 とりあえずそれで試してみて、できたら解決 できなかったら再度そう補足することにします。

LongSecret
質問者

補足

試してみましたが、なかなか便利ですね♪ 完全に独自のものを作るなら結局コードいじることには変わりないでしょうが、実験とか簡単なものをサクッと作るには最適そうです。 肝心のダイアログテンプレートについてはやはり依然としてできないので しょうがないからこちらでも自分用の新しいプロジェクトで試してみたら、ResEditで作ったのを貼り付けても、手打ちでやっても、やはりしっかりできました。色々コードいじってみても概ね予想通りのことが起きてくれます。 では現在作りこんでいるほうではなぜできないのかが不明瞭ですが、よく分かってないことについて何が足を引っ張っているのかをこの時点から調べ直すのは結構大変だと思うので、今のところは可能だということが分かったということで解決ということにします。 XPスタイル・クラシックスタイル(あるいは将来的にはVistaや7にも対応したい問題)については http://mspace.sakuraweb.com/comp/prog/theme.htmlhttp://msdn.microsoft.com/ja-jp/library/ms997646.aspx を見て、OSチェックやXPテーマが適用されているかどうかの判定や、部分的なテーマの変更までは現在できました。 もうちょっとで完全に思いどおりかもしれません。 重ねて、ありがとうございました。

  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.3

>VC++2008EEはリソースエディタが使えないこととか フリーのリソースエディタもあります。 ResEditなど…。 >リソース側の書き方が問題なのでしょうか? 掲示したリンク先に 『次に、追加するコントロールの位置を決めるために、スタティックコントロールを作ってそのIDを0x45fにします。デフォルトプロシージャは、このスタティックコントロールを中心としてそれぞれのコントロールをダイアログに追加します。』 とありますが…… リソースファイルに #include <Dlgs.h> して、IDがstc32のスタティックコントロールをダイアログ中に作成しておく必要があります。

LongSecret
質問者

お礼

確認ありがとうございます。 私が書いたコードは、やむなくそのリンク先のサイトから圧縮データをダウンロード、解凍し、それがビルドでき、カスタマイズした動作をしていることを確認したうえで、ほとんどそのまま載せたものです。 なので、おそらくSTATICという文字そのものこそありませんが LTEXT "",1119,0,0,186,49 の部分がそれに当たるのだと推測します。 (stc32 == 0x45f == 十進表記で1119) 数値の直打ちしてるので必要なさそうですが 念には念のために#include <Dlgs.h>を加えてみても、やはり変化なしです。 さらにダウンロードしたファイルを端から端までネットを併用しながら調べてみるものの、今のところ見当がつきません。 MFC非対応なことと関係があるのかもしれませんが フリーのリソースエディタを使うことで対処可能なのでしょうか…? ------------------------------ もうひとつの問題については調べまくってたら解決できました! デザインについてはどうやら .NETとWindowsAPIってことではなく Windows XPスタイルとクラシックスタイル、という違いだったようです。 こちらのサイト http://www.g-ishihara.com/vc_wi_01.htm を参考にして(というかそのままやったら)見事完全ネイティブのままWindowsXPスタイルにできました。 当然これはコモンコントロール全体にかかわるので、メッセージボックスやらなにやらも全部影響受けます が… CPUやメモリ使用量は変わってないのにウインドウの応答速度が若干遅くなった気がします。 バージョン6.0.0.0の弊害でしょうか…w これって、結局はそれ用のdll読み込むってことだから、どうにかしてプログラム起動中に動的に変更とかってできないでしょうか? #pragma comment(lib, "comctl32.lib") っていうのは書きましたが、comctlについて手動でdllそのものをどうこうした記憶はありません。 …動的には変更しなくてもいいと言えばいいでしょうが せめてアプリケーション内にそういう選択肢を作っておいて、起動中に設定変更→終了→再度起動すると、そっちのスタイルになる っていう機能があると良いと思いました。 そのいずれかは可能でしょうか?

回答No.2

まず.NETで、言語に関わらずマネージ、アンマネージの合成は可能です。 C++から混在させるとスムーズですがGCとマーシャリングを適切に行う必要はあります。混在の場合、GCメンバ関数をうまく使ってインスタンスが勝手にリリースされないようにすることが大事です。また、VBやC#でも合成は可能です。C++で参照できるヘッダが使えないので、コードのメンテナンスが煩雑になるところが難点です。 ですのでマネージサイドとアンマネージサイドをプロセスとして分離するのが最適です。プロセスはEXEという意味でなくインプロセスという意味です。つまり、カスタムダイアログを設ける側は、DLLでCOM/DCOM等のオートメーションでの実装がマネージコードとの相性もよいと思います。 そうすれば後々再利用も簡単になりますね。 Win32APIとしてのGetOpenFileName 関数は、テンプレートを使って別のダイアログを割り当てることができます。テンプレート専用のフック関数を使いますが、独自の選択処理などを追加しなければセオリーどおりの処理しか記述しません。テンプレートを使う場合、ダイアログ内で使う必要最小限のコントロールIDはすべて規定の値である必要があります。つまりコントロールの配置は自由に移動できます。カスタマイズ部分は自由にして結構です。ダイアログは、NETより以前からあるRCリソースファイルで作ってください。マネージサイドのコードは一切使えません。 ここからは、Win32ベースで話を進めます。 カスタムダイアログの基本は、OPENFILENAME->lpTemplateNameにダイアログリソースのIDを指定します。ダイアログIDが整数IDのときは MAKEINTRESOURCEマクロで代入します。OPENFILENAME->FlagsにOFN_ENABLETEMPLATE|OFN_ENABLETEMPLATEHANDLEを論理和します。OPENFILENAME->hInstanceは起動する側から得てください。マネージ混在なら、アンマネージからではなくマネージコードからMarshal.GetHINSTANCE(...)で得てください。100% アンマネージなら、MFC混在であればAfxGetInstanceHandle 関数、そうでないならWinMainやGetModuleHandle から得ます。但し、これらのWin32系アンマネージ関数はそれぞれ動作が異なります。Windows のリリース(3.1~95/98、2000/XP等)によって返されるインスタンスの意味が異なるので注意してください。 OFN_EXPLORERフラグがエクスプローラーのシェル機能を実装するかどうかになります。OFN_EXPLORERを使うと外観がかなり変わりますがテンプレートで用意するリソースも増えますので、ご自分でチョイスしてください。OFN_EXPLORERを指定するとExplorerスタイルのフック関数(コールバック)を用意する必要があります。ちなみにPhotoshopのダイアログはOFN_EXPLORERを指定してのカスタムダイアログです。OOPENFILENAME->lpfnHookにフック関数のインスタンスをセットします。 基本はこのコードをインプリメントしてDCOMやActiveXでコンポネントを実装します。 参照URLにテンプレートに関するマイクロソフトMSDN(英語)を載せました。 VS4.2のころは日本語リソースも充実していたのですが、需要が少ないためか現在は英語でのヘルプしかありません。カスタムテンプレートはコモンダイアログ共通の機能なのでファイル保存や読み込み以外でもカラー選択、フォント選択でも同じようにして使います。C++からであればヘッダファイルやライブラリはそのまま使えます。C#やVBを経由してのマネージコードからだとヘッダファイルの定義は全てマネージコードで再実装する必要があり、またライブラリは属性クラスの[DllImport]ですね。 ご存知かも知れないですが、ヘッダのコーディングが面倒だと思うので以下を使ってください。 誰かさんたちが作ってくれた.NETから使えるAPIのヘッダ宣言がたくさん載っています。 http://www.pinvoke.net/ 基本的にNETフレームワークにない機能を実装しようとしたら混在あるいはインプロセス分離で統合する以外は今のところ方法がありません。まだ中身は見ていないですが NET Framework 4.0 でも大差はないと思います。

参考URL:
http://msdn.microsoft.com/en-us/library/ms646951(VS.85).aspx
LongSecret
質問者

お礼

ありがとうございます。 インプロセスというのは、つまり、コード的に切り離すかどうかは任意だけども、最終的に出来上がるものは同じ実行ファイル内で混在する動作にはなるという意味でしょうか? 以前プログラミング初めて間もない辺りからベンチマークを含め長いことやっていましたので、マーシャリング等はOKです。 ただし、以前調べてこの環境ではDLLを作れない…? (あるいは分かりづらい…?) ような感じだったのでDLL絡む辺にはかなり疎いです。 なので >つまり、カスタムダイアログを設ける側は、DLLでCOM/DCOM等のオートメーションでの実装がマネージコードとの相性もよいと思います。 >そうすれば後々再利用も簡単になりますね。 この文の意味が正確に分かりません。 これはもともと作られたDLLがあるから、それを使えばいいという意味なのでしょうか? それとも自分がCOM/DCOMとかを使って作ったうえで、分離してしまえばいいという意味なのでしょうか? また、全部同じプロジェクトに突っ込む場合だと少なくとも一行でもマネージコードを使うならそう設定することになり、時間がかなりかかってしまうようになるのですが これはつまり、DLLを作ってマネージコードをそっちに完全に切り離せるなら、通常はビルド時間がネイティブのみなのでかなり短い、ということも可能なのでしょうか? >OFN_EXPLORERについて もしかしたらそっちが原因なのかもしれません。これを指定しただけだと外観が変わっていません。テンプレートが成功した場合に、それ以外も変わる …ということなのでしょうか? あるいはダイアログテンプレートを使う場合何らかの初期化が必要なのでしょうか?

関連するQ&A

  • 色々なウインドウについて

    VC++2008でWindowsフォームアプリケーションを作っています。 .NET Frameworkのクラスライブラリだけでは出来ないと思うのですが 画像の真ん中のタイトルバーは普通ですよね? その下の、一回り小さいタイトルバーを持つウインドウや 右上はPhotoshopのもので左上はXGworks STというソフトのものなのですが こういった様々なウインドウは、全てWindowsAPIを使えば出来るのでしょうか?

  • ダイアログウィンドウの初期化メッセージ

    Win32API入門(http://wisdom.sakura.ne.jp/system/winapi/)を見ながら、BCC32でGUIプログラミングの勉強をしています。 現在、以下URLのサンプルのように、ダイアログアプリケーションとして自作のソフトを作ろうとしています。 http://wisdom.sakura.ne.jp/system/winapi/win32/win89.html さて、通常のダイアログ上のコントロールを初期化する際は、ウィンドウプロシージャでWM_INITDIALOGを補足するのが常套手段だと思いますが、上記サンプルのように、ダイアログアプリケーションとしてダイアログを生成した場合、WM_INITDIALOGが発行されないようです。 そこで、WM_CREATEを利用しようとしましたが、WM_CREATEが発行された時点では、GetDlgItem()等によるダイアログ上のコントロールのハンドル取得ができないようで、困ってしまいました。 ダイアログアプリケーションの初期化は、どのように行うのが正しいのでしょうか? WinMain()で、CreateDialog()の直後に初期化処理を行えば、ひとまず目的は達成するのですが、WinMain()内での処理は何となく邪道のような気がして、質問させていただきました。

  • C++のクラス内で、ウインドウプロシージャなどの・・・

    Visual C++ 2008で、Windowsフォームアプリケーションを作っています。 .NET Frameworkでは実現できないウインドウを作るために、WindowsAPIに頼り始めたのですが これが分からないのでとても不便な状態なのですが WindowsAPIで使うための、ウインドウプロシージャや、ウインドウハンドルや、デバイスコンテキストハンドル・・・等を C++のクラスの中で、staticを付けずに普通のメンバとして組み込む事は、出来るのでしょうか? - - - - - - 今までは分からなかったので、とりあえずAPIに触れてみようと思いstaticをつけてどうにかやっていたのですが、それだとクラス内のインスタンスメンバにアクセスできないので、クラス内に作ってる意味がない感じになってしまいます。

  • .NET Frameworkの修復機能について

    こんばんは。 .NET Frameworkのアプリケーション修復機能について質問があります。 以下@itの記事を参考に、.NET Frameworkのアプリケーション修復機能について勉強中です。 http://www.atmarkit.co.jp/fdotnet/technology/idnfw11_04/idnfw11_04_05.html 上記記事内容では、管理ツールの[Microsoft .NET Framework 1.1 ウィザード]から アプリケーションの修正を選択する手順となっていますが 私の環境では、管理ツールに[Microsoft .NET Framework 1.1 ウィザード]がなく [Microsoft .NET Framework 2.0 Configuration]がありましたので、こちらを代わりに操作しました。 [Microsoft .NET Framework 2.0 Configuration]で構成するアプリケーションに 自作exeを追加し、タスクから「アプリケーションの修正」をクリックすれば .NETアプリケーションの復元ダイアログが表示されると思いましたが、何も表示されず反応なしです。 自作exeは、何度かアプリケーション構成を変更し、正常終了と異常終了を実行済みです。 【質問】 1.「アプリケーションの修正」をクリックしても無反応な原因としては、何が考えられるでしょうか。 2.@itの記事によれば、以下のフォルダにアプリケーションのログを記録としているとのことだったため、ログを確認してみたかったのですが、該当フォルダを見つけることはできませんでした。 アプリケーションのログは、どこに記録されるのでしょうか。 @itの記事でログが出力されると記載されていたパス C:\Documents and Settings\ユーザー名\Local Settings\Application Data\ApplicationHistory 私の環境はWindows7のため、上記を以下に読み替えて探しました。 C:\Users\ユーザー名\AppData\Roaming 配下にApplicationHistoryフォルダがありません。 【環境について】 OS:  ・Windows7 Ultimate 64nit SP1 .NET関連のインストールプログラム:  ・Microsoft .NET compact Framework 1.0 SP3 Seveloper  ・Microsoft .NET compact Framework 2.0  ・Microsoft .NET Framework 4 Client Profile  ・Microsoft .NET Framework 4 Client Profile Language Pack - 日本語  ・Microsoft .NET Framework 4 Extended  ・Microsoft .NET Framework 4 Extended Language Pack - 日本語  ・Microsoft .NET Framework 4 Multi-Targeting Pack よろしくお願いします。

  • getOpenFilenameの使い方

    VB2005において下記のようなサンプルプログラムを書いていますが、 'GetOpenFilename'は'System.Windows.Forms.Application'のメンバーではありません。 というエラーメッセージが出ます。 要はファイルを読み込む前にファイル選択用のウィンドウを開きたいのですが、 どのような書き方をしたらいいのでしょうか。 Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim filename As VariantType filename = Application.GetOpenFilename("Text Files (*.txt), *.txt") End Sub End Class

  • GetOpenFileName 開かない

    win7 32bitで使用していたVBAが、win10 64bitで動作せず、困っております。 ダイアログが開かないまま先に進んでしまうのですが、どのように修正すれば良いでしょうか? #If Win64 Then Public Declare PtrSafe Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" ( pOpenFileName As OPENFILENAME) As Long #Else Public Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" ( pOpenFileName As OPENFILENAME) As Long #End If Type OPENFILENAME lStructSize As Long hwndOwner As LongPtr hInstance As LongPtr lpstrFilter As String lpstrCustomFilter As Long nMaxCustrFilter As Long nFilterIndex As Long lpstrFile As String nMaxFile As Long lpstrFileTitle As String nMaxFileTitle As Long lpstrInitialDir As String lpstrTitle As String Flags As Long nFileOffset As Integer nFileExtension As Integer lpstrDefExt As String lCustrData As LongPtr lpfnHook As LongPtr lpTemplateName As Long End Type Public Const OFN_ALLOWMULTISELECT = &H200 Public Const OFN_CREATEPROMPT = &H2000 Public Const OFN_EXPLORER = &H80000 Public Const OFN_FILEMUSTEXIST = &H1000 Public Const OFN_HIDEREADONLY = &H4 Public Const OFN_NOCHANGEDIR = &H8 Public Const OFN_NODEREFERENCELINKS = &H100000 Public Const OFN_NONETWORKBUTTON = &H20000 Public Const OFN_NOREADONLYRETURN = &H8000 Public Const OFN_NOVALIDATE = &H100 Public Const OFN_OVERWRITEPROMPT = &H2 Public Const OFN_PATHMUSTEXIST = &H800 Public Const OFN_READONLY = &H1 Public Const OFN_SHOWHELP = &H10 Public Const OFN_EXTENSIONDIFFERENT = &H400 Public Function GetFileName(pstrDir As String, pstrFile) As String Dim pOpenFileName As OPENFILENAME Dim lngRet As Long pOpenFileName.hwndOwner = Application.hWndAccessApp pOpenFileName.hInstance = 0 ' pOpenFileName.lpstrFilter = "CSVファイル (*.xlsx)" & String(1, vbNullChar) & "*.xlsx" & String(2, vbNullChar) ' pOpenFileName.lpstrFilter = "全てのファイル (*.*)" & String( 1, vbNullChar) & "*.*" & String(2, vbNullChar) pOpenFileName.lpstrCustomFilter = 0 pOpenFileName.nMaxCustrFilter = 0 pOpenFileName.nFilterIndex = 1 pOpenFileName.lpstrFile = String(511, vbNullChar) pOpenFileName.nMaxFile = 511 pOpenFileName.lpstrFileTitle = String(512, vbNullChar) pOpenFileName.nMaxFileTitle = 511 pOpenFileName.lpstrInitialDir = pstrDir pOpenFileName.lpstrTitle = String(1, vbNullChar) pOpenFileName.nFileOffset = 0 pOpenFileName.nFileExtension = 0 pOpenFileName.lpstrDefExt = String(1, vbNullChar) pOpenFileName.lCustrData = 0 pOpenFileName.lpfnHook = 0 pOpenFileName.lpTemplateName = 0 pOpenFileName.lStructSize = Len(pOpenFileName) pOpenFileName.Flags = OFN_HIDEREADONLY _ Or OFN_EXPLORER lngRet = GetOpenFileName(pOpenFileName) GetFileName = Left(pOpenFileName.lpstrFile, _ InStr(pOpenFileName.lpstrFile, vbNullChar) - 1) If Len(GetFileName) Then pstrFile = Left(pOpenFileName.lpstrFileTitle, _ InStr(pOpenFileName.lpstrFileTitle, vbNullChar) - 1) pstrDir = Left(GetFileName, Len(GetFileName) - Len(pstrFile) - 1) End If End Function '実行プロシージャ Private Sub CmdlgTest() Dim strPath As String, strfile As String Debug.Print GetFileName(strPath, strfile) End Sub

  • GetOpenFileName()について

    Visual C++(Win32API)でアプリケーションを開発しているのですが,GetOpenFileNameで複数のファイル名を取得できるもののファイルごとの分割が出来ません。ちなみに,複数のファイルを選択できるようにはしてあります。また,環境の関係上文字列の型はLPTSTRを使わずLPWSTRを利用しています。環境は以下の通りです。 OS:Windows 7 SP1 Visual Studio:Visual Studio 2010 Professional 回答よろしくお願いします。

  • 韓国版WindowsXPでご教授ください。

    日本語版WindowsXp SP3、.Visuastudio2005 SP1で作成したアプリケーション(NET Framework2.0環境)を韓国版WindowsXP SP3で動作をさせる必要があり、インストール後動作をさせた所以下のような現象がでており皆目検討がつかず困っております。ご教授を頂けます様お願い致します。 作成アプリケーションは、以下環境で作成しております。  ・日本語版WindowsXp SP3  ・Visuastudio2005 SP1  ・NET Framework2.0  ・アプリケーション画面サイズ 800×600 韓国版WindowsXP SPで発生している現象は、800×600で作成したアプリケーションが、  (1)韓国版WindowsXPの画面左上端(X=0、Y=0)より数十ピクセル分下から表示されている。    X座標は、0の位置です。  (2)800×600のアプリケーション画面が韓国版WindwosXPの画面解像度800×600内に表示されず    右端と下が切れて表示されない。画面が全体的に大きくなっているようにみえる。       ■添付のイメージ状態です。 ※OSの設定で改善できるものなのでしょうか?それともプログラムで何か制御をいれないといけな   いのでしょうか?

  • Windows2000のAPIの使い方について

    以前、Win95、NT開発環境でAPI関数のGetOpenFileNameを使用し、 ファイルを選択するダイアログを表示するようなプログラムをVBAで作りました。 Win95、NTでは正常に動作するのですが、 Win2000ワークステーションではダイアログが表示されません。エラーもでません。2000では構造体が3つ追加されていることはわかったのですが、 実際プログラミングしてみたところ正常に作動しません。 いろいろ調べたのですがよく分からないので、サンプルのプログラム等を教えていただきたいのですが・・・。よろしくお願いします。

  • Windowsのダイアログ

    Windowsにダイアログがでてくるじゃないですか?そのダイアログが出たときに後で編集できるように保存できないのでしょうか?ちなみにおもしろいダイアログを作ろうと思いこのことを聞いています。これを作っても違法じゃありませんよね?おねがいします。

専門家に質問してみよう