• 締切済み

WindowsMobile + DirectX + 画面回転

advanceboyの回答

回答No.1

的外れなことを行っていたらスミマセン。 Mobileではなくて、普通のWindowsでの経験から回答させていただきます。 画面方向の切り替えを行うとアプリが止まると言うことですが、 画面の縦横が変わった際にWM_SIZEを切り替えるだけで問題はないのですか? 描画先のグラフィックハンドルやらの情報が失われていたりしませんか? WM_DISPLAYCHANGEメッセージとかが来ていたら要注意です。

関連するQ&A

  • 突然ですが、DirectX9について質問させて頂きます。

    突然ですが、DirectX9について質問させて頂きます。 ウィンドウモードとフルスクリーンモードを切り替える プログラムを組んでいますが、なぜか、フルスクリーンモード からウィンドウモードに復帰すると画面サイズが変化してしまいます。 以下がその問題となる関数です。 void SetWindowStyle( HWND hWnd, bool g_WindowMode ) {     if( g_WindowMode )     {         SetWindowLong( hWnd, GWL_STYLE, WS_OVERLAPPEDWINDOW | WS_VISIBLE );         MoveWindow( hWnd, 0, 0, 0, 0, false );         SetClientSize( hWnd, WINDOW_WIDTH, WINDOW_HEIGHT ); // 以下に記載     }     else     {         SetWindowLong( hWnd, GWL_STYLE, WS_POPUP | WS_VISIBLE );         MoveWindow( hWnd, 0, 0, 800, 600, true );     } } 以下はウィンドウのサイズを再設定する関数です。 void SetClientSize( HWND hWnd, int width, int height ) {     RECT wnd_Rect, clt_Rect;     int WindowSize_Width, WindowSize_Height;     GetWindowRect( hWnd, &wnd_Rect );     GetClientRect( hWnd, &clt_Rect );     // ウィンドウのサイズを求める     WindowSize_Width = ( wnd_Rect.right - 1 ) - ( wnd_Rect.left - 1 );     WindowSize_Height = ( wnd_Rect.bottom - 1 ) - ( wnd_Rect.top - 1 );     // ウィンドウのサイズを変更     MoveWindow(    hWnd,             wnd_Rect.left,             wnd_Rect.top,             width + (WindowSize_Width-clt_Rect.right),             height + (WindowSize_Height-clt_Rect.bottom),             true     ); } SetClientSize関数はアプリ起動時に一度実行され、800x600に変更されます。 この時点では問題はありません。 しかし、フルスクリーンモード→ウィンドウモードと切り替えると、 800x576と値がおかしくなります。 結果的に800x600になる予定だったのですが…。 同じ関数を使用しているのに、なぜサイズが変化してしまうのでしょう? どなたかこの問題を解決する方法をご存知ないでしょうか? よろしくお願いします。

  • WindowsMobile6での実機とエミュレータでのDLL読み込みの

    WindowsMobile6での実機とエミュレータでのDLL読み込みの違いについて VS2005のVBでWindowsMobile6(EM-ONEα)のプログラムを作ろうとしています。 実機ではMyDeviceのWindowsフォルダに対象のプログラムに必要なDLLファイルをコピーしておけば普通に実行できるのですが、 エミュレータ(WindowsMobile6 Classic Emulator)でデバッグしようとすると、起動時に以下のエラーメッセージが出ます。 MissingMethodException Can't find PInvoke DLL '必要なDLLの名前' この現象についての解決法か、自分が何を勘違いしているのかを教えていただきたいと思います。 「VS2005 WM6 エミュレータ DLL PInvoke」といったキーワードで調べて考えた限りでは、 実機ではこのDLLがレジストリに登録してあって、エミュレータの方にはまだ登録してないのが原因か、と思いましたが実際の登録方法がわかりませんでした。 また、MyDeviceのWindowsフォルダに置きさえすればレジストリの登録は不要ではないかと思いましたがどうでしょうか? よろしくお願いします。

  • DirectXプログラミングの参考書を読んで

    『マスタリングDirectXプログラミング 橋口ゆうすけ著』を読みながら、ゲームプログラミングの練習をしているのですが、このプログラムを実行してもエラーが出て実行できません。 エラーがでているのは #include <d3dx9.h> の部分。 エラー内容は include ファイルを開けません。'd3dx9.h': No such file or directory です。 その内容どおりd3dx9.hというファイルがないからなんでしょうけど。。。 本書ではこの内容を実行してみてと書いてあります。 ということは実行できるはず・・・ ちなみに、本書の内容は「DirectX SDK(August 2007)」を用いて・・・と書いてあるんですが、その意味がよくわかっていません。 これが原因なのでしょうか? それともd3dx9.hというファイルがないからなんでしょうか? とは言え、#include <windows.h>や#include <basetsd.h>という行はエラーなく読み込んでいるようなんですが。。。(そんなファイルないよ・w・; なにかアドバイスお願いします。

  • GetWindowRect()が正しくない。

    Yahoo知恵袋に質問したのでですが回答がつかなかったので、こちらで再度質問します。 WindowsMobileでのGetWindowRect()の使用について分からないことがあります。 WindowsMobileもWindowsの開発も初心者の者です。 上記関数で、WM6.5の320x320Square画面のサイズが正しく得られません。 WindowsXP SP3に ・VisualStudio 2005 ・Windows MobileSDK 6 ・Windows Mobile 6.5 Professional Developer Tool Kit (JPN).msi 等をインストールした環境で、 ターゲットの画面のサイズを知りたくて、以下のように記述しました。 RECT rect_win; GetWindowRect(GetDesktopWindow(), &rect_win); 通常は正しいデータが得られるのですが、 WM6.5の320x320ドットのSquare画面の時だけ、 top:26 bottom:240 left:0 right:240 という値が返ってきます。 エミュレータでも、実機(ドコモSC-01B)でも同じ結果です。 topの26はメニューバーの分かと想像はつくのですが、bottomとrightが240となっているのが理解できません。 コーディングが間違っているのでしょうか?また、正しい値を得る別の方法があるのでしょうか? よろしくお願いします。

  • オンラインゲームのフルスクリーンモードについて教えてください

    解決方法が分からないため、こちらで相談させていただきます。 オンラインゲームでフルスクリーンモードにすると、 ゲーム画面が液晶の左上に4分の1くらいのサイズで表示されます。 それ以外の部分は黒く、一応フルスクリーンモードにはなっている感じです。 以前はちゃんとしたフルスクリーンでゲームが出来たのですが、突然この状態になってしまいました。 また、色々なオンラインゲームで試してみましたが、どのゲームも同じ状態になります。 色々と解決策を調べてみましたが、よく分かりません。 Alt+Enterは試してみましたがダメでした。 以下スペックです。 FMV-DESKPOWER(一体型デスクトップPC) OS:XP CPU:2.93GHz DirectX:9.0 メモリ:1G グラボ:オンボードIntel(R)82915G/GV/910GL 低スペック稼動のオンラインゲームでも試みたので、 スペックの問題ではないと思うのですが・・・。 その他、必要な情報がありましたら教えてください。 追記させていただきます。 どうかよろしくお願いいたします。

  • Windows7とDirectX9.0cについて

    こんにちは。 現在DirectX9.0cでプログラムを書いているものです。 質問させてください。 私は普段は一人暮らしで、デスクトップで開発しています。 しかし今は年末ということもあり、帰省していてノートパソコンで開発しています。 デスクトップPCで開発していたアプリケーションをノートパソコンで実行してみたところ、実行速度がひどく落ちてしまって理由がわからず困っています。 デスクトップでは60しっかり出るのに対し、ノートパソコンで実行するとFPSは1(程度)です。 環境や設定などは以下のとおりです。 ・DirectXのデバイス生成時   D3DPRESENT_PARAMETERS d3dpp={};   d3dpp.BackBufferWidth = 1024;   d3dpp.BackBufferHeight = 768;   d3dpp.Windowed = true;   d3dpp.EnableAutoDepthStencil = true;   d3dpp.BackBufferFormat = D3DFMT_A8R8G8B8;   d3dpp.AutoDepthStencilFormat = D3DFMT_D24S8;   d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;   d3dpp.BackBufferCount = 1;   d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_ONE;   gpd3d = Direct3DCreate9( D3D_SDK_VERSION );   gpd3d->CreateDevice( D3DADAPTER_DEFAULT,                       D3DDEVTYPE_REF,                       hWnd,                       D3DCREATE_HARDWARE_VERTEXPROCESSING,                       &d3dpp,                       &gd3ddevice );. ・やってること ビルボードにテクスチャを貼って表示と4枚 CreateVertexBufferなどは使用せずSetFVFとDrawPrimitiveUPで描画。 D3DDEVTYPE_REFの部分をD3DDEVTYPE_HALにしてもデスクトップ、ノートパソコンともにエラーも出ずデバイスは生成できるのですが、ノートパソコン側でD3DDEVTYPE_HALで実行すると何も表示されないので仕方なくD3DDEVTYPE_REFで実行しています。 開発環境 VisualStudio2008 academic edition Microsoft DirectX SDK (June 2010) スペック /* ・デスクトップPC Core i7 920 2.66GHz Windows7 64bit Ultimate Memory 12GB Geforce 9800GTX */ /* ・ノートパソコン Core i7 Q720 1.60GHz Windows7 64bit Ultimate Memory 4GB Geforce GT 240M */ このスペックでFPSがまったくでないので何が問題かさっぱりです。 DirectXのControlPanelでDebugモードにして出力を見ましたが特に問題は見つけられませんでした。 ほかにもリビルドやReleaseモードでコンパイルなども試してみたのですが症状は変わらずです。 どのような問題があってノーとパソコンのWindows7 64bit上でのDirectX9.0cの実行速度が上がらないことが考えられますでしょうか? /* 現在の状態 ・シェーダー(HLSL)などは使用していません。 ・View行列とProjection行列とWorld行列をセットして座標変換して描画しています。 ・スレッドは立ち上げていません。 ・メッセージループは以下のような形です MSG msg={0}; while( msg.message != WM_QUIT ) {   if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )   {     TranslateMessage( &msg );     DispatchMessage( &msg );   }   else   {       /* アップデート処理や描画処理など */   } } */ わかりづらいかと思いますが、よろしくお願いします。

  • TCPでデータを受け取ってそれを画像として連続表示する、いわゆるストリ

    TCPでデータを受け取ってそれを画像として連続表示する、いわゆるストリーミング動画再生ソフトを作ろうと思っています。 ソフトウェアプログラミングは疎く、TCPでのデータの受信プログラムの作成はできるのですが、PCへの負荷を最小限にして表示する方法がよくわからず困っております。 動画サイズは、1280*720のフルカラーで、60fpsで表示したいと考えています。 画像は非圧縮のベタデータで送られてきます。 VC++とDirectXを用いれば高速に表示できるかと思い(どちらも使用は初めてです)、この数日調べまわっていますが、まずベタデータを表示することすらままならず(ファイルを読み出してテクスチャを作成し、レンダリングするという情報は多いのですが。。)、それがなんとかできても今度はそのデータを変えてアニメーション表示しようとするとメモリーを山のように消費してまともに動かないプログラムが出来上がったりと、なんとも苦しんでおります。 当方使用できるプログラミング言語はC言語のみですが、必要であればC++も勉強して使用したいと思います。 どのような手法が最適で、どのような手順でやればいいのか、ヒントだけでも、教えていただければ助かります。

  • Windowsmobile

    WindowsmobileのiPAQの購入を考えています。 サイトでいろいろみているのですが、 Windowsmobileのバージョンがよくわかりません... 2003とか5.0とかどれがあたらしいのでしょうか? MSのサイトみてもよくわかりません よろしくお願いします。

  • マリオカート7でVSモード

    上記の題名通りマリオカート7でVSモードが廃止されたのは本当ですか? 本当だとしたら、1人で遊ぶ時になんだか物足りない気分です。 1Pで長く楽しめるモードありましたら教えて下さい。

  • WindowsMobile

    WindowsMobileの位置付けがよくわからないのですが OSの事でしょうか? Androidの中にWindowsMobileがあるわけではなく iPhone・Android・WindowsMobileと同じ位置にあるのでしょうか?