aris-wiz の回答履歴
- C言語 ポインタ型引数の呼び出しについて
C言語 ポインタ型引数の呼び出しについて 私が作成したのではないのですが下記のような関数があります。 この関数は文字列を渡すとカンマ(,)で分割して返してくれる関数 らしいのですが、使用方法がわからず、こまっています。 char* abcdef(char** p) 当方としては下記のような変数定義を行っているのですが char cbuff[128]; //文字列(カンマを含めた) char *coutbuff[128]; //分割された文字列 理想としてはこんな感じで呼び出したいのですが strcpy(cbuff,"0,,123,45,6"); coutbuff=abcdef(cbuff); どのように呼び出したらよいかご教示願います。
- ID3DXSprite::Drawメソッドに関して質問です。
ID3DXSprite::Drawメソッドに関して質問です。 ID3DXSprite::Drawメソッドの第3引数でスプライトの 中心を識別する座標を指定できますが、 この座標を画像の様に中心にセットします(単に2で除算するだけですが)。 スプライト上では中心を(0,0)と扱うので、仮にこのスプライトを 左上にあわせて描画するとします。 なお、スプライトのサイズと、ウィンドウのクライアントサイズは 完全に一致しているとします。 単純に中心までの幅はX、中心までの高さはXとなりますので、 スプライトをX、Y分だけ右下にずらせば 問題なく描画されるかと思っていたのですが、 何故か画像内の結果上の様に地味に左上に描画されてしまいます。 そこで画像内の結果下の様にそれぞれにさらに0.5pixlずらして描画しますと これは想像どおりの位置で描画されます。 インターネットで調べるとテクスチャの描画の際には0.5pixl云々という記述が あるのですが、この場合でも0.5pixlのずれを意識する必要があるのでしょうか? それとも私自身、根本的に座標の求め方に問題があるのでしょうか? どうか、ご指摘お願いします。
- 突然ですが、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になる予定だったのですが…。 同じ関数を使用しているのに、なぜサイズが変化してしまうのでしょう? どなたかこの問題を解決する方法をご存知ないでしょうか? よろしくお願いします。
- 突然ですが、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になる予定だったのですが…。 同じ関数を使用しているのに、なぜサイズが変化してしまうのでしょう? どなたかこの問題を解決する方法をご存知ないでしょうか? よろしくお願いします。
- 突然ですが、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になる予定だったのですが…。 同じ関数を使用しているのに、なぜサイズが変化してしまうのでしょう? どなたかこの問題を解決する方法をご存知ないでしょうか? よろしくお願いします。
- 突然ですが、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になる予定だったのですが…。 同じ関数を使用しているのに、なぜサイズが変化してしまうのでしょう? どなたかこの問題を解決する方法をご存知ないでしょうか? よろしくお願いします。
- ボタンのハンドルウィンド取得について
OS:Windows Vista Business 開発環境:Microsoft Visual Studio C++ 2005,Microsoft Spy++ XRay(Data Analyze)----.exeを起動し、データファイルを読み込むため ボタンを押して"開く"ダイアログを表示させたいのですが、ボタンの キャプションが空白であるためハンドルウィンドが取得できません。 ボタンのコントロールIDがわかっているため、下記のようなプログラムを書いてみたのですが上手くいきません。ご教示お願いいたします。 hWnd=FindWindow("ThunderRT6FormDC",_T("XRay (Data Analyze) --- ")); SetForegroundWindow(hWnd); hbtn=GetOpenButton(hWnd); HWND GetOpenButton(HWND hdlg) { HWND hbtn = NULL; ::EnumChildWindows(hdlg, FindOpenButton, reinterpret_cast<LPARAM> (&hbtn)); return hbtn; } static BOOL CALLBACK FindOpenButton(HWND hwnd,LPARAM lParam) { TCHAR tbuf[1024]; ::GetWindowText(hwnd, tbuf, sizeof(tbuf)); //表示されているテキストを取得 if ((lstrcmp(tbuf, _T("")) == 0)&&(GetDlgCtrlID(hwnd)==0x00000032)) { HWND *ret = reinterpret_cast<HWND*>(lParam); *ret = hwnd; return FALSE; //探索終了 } return TRUE; //探索続行 } 画像は青で囲んであるのがアプリのウィンドウ、赤で囲んであるのがハンドルウィンドを取得したいボタンのウィンドウです。
- C言語全体の考え方が不明です
今日は、Cの初心者です、宜しくお願いします。 Cプログラムの「int main(){・・・・return 0;}」 とはどのような意味でしょうか。 これはプログラム全体をひとつの関数(サブルーチン、サブプログラム)と考えているのでしょうか。 また、この「return 0;」をコメントにしても特にエラーは出さないのですが(警告は出てるかも)。 このC言語全体の考え方とはどのようなものでしょうか。 戻り値をとる場合も当然あるのでしょうか。 他の言語から入った者には、何か言語全体のスタンスというか、位置づけみたいなものが非常に分かりにくいです。 宜しくお願いします。 ==================================================== int main() { printf("hello\n"); // return 0; }
- ベストアンサー
- C・C++・C#
- htgotk_001
- 回答数5
- 構造体の配列について
--------------------------------------------------- #include<stdio.h> #include<string.h> struct person{ char name[80]; int height; int weight; }; int main() { struct person dt[10]; strcpy(dt[1].name,"日本太郎"); //// (1) //// dt[1].weight=70; dt[1].height=180; dt[5]=dt[1]; //// (2) //// printf("%s %d %d \n",dt[1].name,dt[1].weight,dt[1].height); return 0; } ----------------------------------------------------- 以上のプログラムは参考書に記述されていたものですが、(1)の部分で、配列名dtに「"日本太郎"」を設定するならわかるのですが、配列の1つの要素「dt[1]」に「"日本太郎"」を設定しているというように見え、これはエラーが出ると感じたのですが出ません。 char dt[10]; strcpy(dt[1],"日本太郎"); 以上のようにしてしまっているというイメージがあります。 後、(2)の部分もよくイメージがわきません。 以上、どのような仕組みになっているのか教えていただければ嬉しいです。
- 構造体の配列について
--------------------------------------------------- #include<stdio.h> #include<string.h> struct person{ char name[80]; int height; int weight; }; int main() { struct person dt[10]; strcpy(dt[1].name,"日本太郎"); //// (1) //// dt[1].weight=70; dt[1].height=180; dt[5]=dt[1]; //// (2) //// printf("%s %d %d \n",dt[1].name,dt[1].weight,dt[1].height); return 0; } ----------------------------------------------------- 以上のプログラムは参考書に記述されていたものですが、(1)の部分で、配列名dtに「"日本太郎"」を設定するならわかるのですが、配列の1つの要素「dt[1]」に「"日本太郎"」を設定しているというように見え、これはエラーが出ると感じたのですが出ません。 char dt[10]; strcpy(dt[1],"日本太郎"); 以上のようにしてしまっているというイメージがあります。 後、(2)の部分もよくイメージがわきません。 以上、どのような仕組みになっているのか教えていただければ嬉しいです。
- 構造体の配列について
--------------------------------------------------- #include<stdio.h> #include<string.h> struct person{ char name[80]; int height; int weight; }; int main() { struct person dt[10]; strcpy(dt[1].name,"日本太郎"); //// (1) //// dt[1].weight=70; dt[1].height=180; dt[5]=dt[1]; //// (2) //// printf("%s %d %d \n",dt[1].name,dt[1].weight,dt[1].height); return 0; } ----------------------------------------------------- 以上のプログラムは参考書に記述されていたものですが、(1)の部分で、配列名dtに「"日本太郎"」を設定するならわかるのですが、配列の1つの要素「dt[1]」に「"日本太郎"」を設定しているというように見え、これはエラーが出ると感じたのですが出ません。 char dt[10]; strcpy(dt[1],"日本太郎"); 以上のようにしてしまっているというイメージがあります。 後、(2)の部分もよくイメージがわきません。 以上、どのような仕組みになっているのか教えていただければ嬉しいです。
- Windows XP HOME SP2に Proをアップグレードできますでしょうか?
現在パソコンでWindows XP HOME SP2を使用しております。 この度、自分とパソコンだけ引っ越すので、新しいOSを購入する予定です。 そこで、Windows XP Pro SP3 を購入したいのですが、現在のデータが消えてしまうのは嫌なので、インストールの際アップグレードという形でProがインストールできるのでしょうか? もしできなければ、同じHOMEのSP3を購入しようと思います。これならアップグレードしても問題ないですよね。。 このようなことをしようと思っているのですが、 いかがでしょうか?
- ベストアンサー
- Windows系OS
- noname#103659
- 回答数6
- LBAとファイルの関係
HDD内LBAの値がわかっているときに、そのLBAがどのファイルに該当するのかを知りたいのですが、方法はないでしょうか。 HDDに不良セクタが発生し、そのLBAはわかっているのですが、壊れたファイルはどれなのか、又は使われている領域ではないのか知りたいのです。複数の破損LBAそれぞれに該当するファイル名を知りたいです。 対象OSはWindows、ファイルシステムはFAT32,NTFSです。 別のカテゴリーで質問したのですが回答0でした。改めてこちらで質問させていただいています。 よろしくお願いいたします。
- LBAとファイルの関係
HDD内LBAの値がわかっているときに、そのLBAがどのファイルに該当するのかを知りたいのですが、方法はないでしょうか。 HDDに不良セクタが発生し、そのLBAはわかっているのですが、壊れたファイルはどれなのか、又は使われている領域ではないのか知りたいのです。複数の破損LBAそれぞれに該当するファイル名を知りたいです。 対象OSはWindows、ファイルシステムはFAT32,NTFSです。 別のカテゴリーで質問したのですが回答0でした。改めてこちらで質問させていただいています。 よろしくお願いいたします。
- なぜマクロ「_WIN64」が未定義になるの?(Visual C++)
下記環境で、32bitアプリケーションの64bit化をしようとしました。 OS :Windows XP Professional x64 Edition 開発環境:Visual Studio 2008 Professional Edition 言語 :Visual C/C++ その際のビルドは、構成マネージャのアクティブソリューションプラットフォームを「x64」に設定してから行いました。 ところが、64bitアプリケーションなら定義されるはずの「_WIN64」というマクロが未定義になってしまいます。 なぜなのか、教えて欲しいです。 ちなみに、マクロが未定義かどうかは、 #if defined(_WIN64) #define test #endif の2行目がビルド後、灰色表示になるかどうかで確かめました。 その結果、灰色になりました。 さらに、補足ですが 64bitアプリケーションになっているかを確かめるため、 sizeof(int*)の値を確認したところ、 その値は「8」でした。 参考: [MSDN Visual C++ デベロッパー センター] http://msdn.microsoft.com/ja-jp/library/b0084kay.aspx http://msdn.microsoft.com/ja-jp/library/9yb4317s(VS.80).aspx
- 管理者アカウントが行方不明
初めて質問させて頂きます。 先日家族と共有していたPCが自分専用になりアカウントの整理をしていたのですが管理者の移行をしていたらフリーズしてしまい不十分な状態で再起動されてしまいました。 上記の事象により 1既存のユーザーが標準ユーザーになり尚且つ管理権限を持たない 2管理権限を持つユーザーアカウントがログイン画面に表示されない 上記の2つが重なり管理権限系の作業が一切できない状態です コマンドプロンプトによる無効化もできずセーフモードでの起動も標準ユーザーしか表示されず困り果てています なにか修復する方法もしくは管理権限をもつアカウントでのログインができる方法はないでしょうか? OSはvistaのHOMEpremiumです 回答よろしくお願いいたします
- 締切済み
- Windows系OS
- causa
- 回答数5
- 管理者アカウントが行方不明
初めて質問させて頂きます。 先日家族と共有していたPCが自分専用になりアカウントの整理をしていたのですが管理者の移行をしていたらフリーズしてしまい不十分な状態で再起動されてしまいました。 上記の事象により 1既存のユーザーが標準ユーザーになり尚且つ管理権限を持たない 2管理権限を持つユーザーアカウントがログイン画面に表示されない 上記の2つが重なり管理権限系の作業が一切できない状態です コマンドプロンプトによる無効化もできずセーフモードでの起動も標準ユーザーしか表示されず困り果てています なにか修復する方法もしくは管理権限をもつアカウントでのログインができる方法はないでしょうか? OSはvistaのHOMEpremiumです 回答よろしくお願いいたします
- 締切済み
- Windows系OS
- causa
- 回答数5
- ボリューム名の取得ができないんです。
初めて質問します。 宜しくお願いいたします。 バックアップツールを作成しています。 3台のPCをネットワーク設定が実施されている自社内で使用します。 バックアップ元、バックアップ先は共に特定しません。 仮に、パソコン1のTドライブ(=パソコン2)内のあるフォルダをパソコン3にバックアップするとします。 リストア時に、バックアップ元がどのパソコンであるかを特定するために、バックアップ情報元を記録する時に「Tドライブ」とはせずに、ボリューム名にしようとしています。 【質問1】 ボリューム名は初期値という可能性もある事が最近わかりました。シリアル番号なら特定素材として適していますか? *-----------------------------------------* ボリューム名が取れるかCドライブを固定のキーとしてとりあえず ソースを作成してみたのですが、ret=0なのに、ボリューム名は空値 です。シリアル番号は返却されます。 他の人のPCであれば取得ができるそうなのです。 Cドライブのプロパティにはボリューム名が入っています。 【質問2】 原因が分からずお手上げです。 どのようなことが考えられますか? 見づらいかもしれませんが、ソースを載せます。 よろしくおねがいいたします。 /* ボリューム情報取得関数 */ int get_volime() { int ret; char szRootPathName[4] = "c:\\"; char szVolumeNameBuf[MAX_VOLUME_SIZE]; DWORD dwVolumeNameSize = MAX_VOLUME_SIZE; DWORD dwVolumeSerial; DWORD dwMaxComponentLen; DWORD dwFileSysFlags; char szFileSystemName[MAX_VOLUME_SN_SIZE]; DWORD dwFileSystemNameSize = MAX_VOLUME_SN_SIZE; //szRootPathName[3] = "\0"; /* ボリューム情報の取得 */ ret = GetVolumeInformation((LPCSTR)&szRootPathName,(LPSTR)&szVolumeNameBuf,dwVolumeNameSize,&dwVolumeSerial,&dwMaxComponentLen,&dwFileSysFlags,(LPSTR)&szFileSystemName,dwFileSystemNameSize); /* ボリューム情報をコンソールへ出力 */ printf("%s",szVolumeNameBuf); return 0;
- なぜ、i++なのか?(ものすごくくだらない質問です)
C言語や、それに文法が似ている言語では、 for(i=0; i<10; i++)... のような例をよく見かけます。 ここで、何故か++iよりi++を使うほうを非常によく見かけるのですが、何故なんでしょうか? 単独で使う分にはどちらでも同じなので、実際はどうでもいいのですが。 個人的には、++iは副作用がまずあって、その副作用の結果を返すのに対し、i++は副作用があることは同じですが、「副作用を起こす前の値」を返す演算ということで、i++の方が少々不自然な感じがしますので、++iの方が好きなのですが。 もし、何か特別な理由があることを知ってらっしゃる方がいたらお願いいたします。
- ベストアンサー
- C・C++・C#
- noname#130082
- 回答数12
- VC6からVS2005への移行エラーについて
VC6のサンプルプログラムをVS2005で動かしたいにですが、初心者でエラーが出ています。 VS2005で開こうとすると変換が必要という事で変換して、ビルドすると下記部分のエラーが出ます。 どの様に修正すればいいでしょう。 <エラー部分> #include <strstrea.h> ・ ・ cstrstream cnv(str, 20); cnv.flags(ios::fixed); cnv.precision(0); cnv << val << '\0'; ここで、#include <strstream> に変えて、OKとなりましたが、以降の部分は同じエラーです。 どうやら、cnv がおかしいようです。