こんにちは、前に一度書いたものです。日数が経ってしまってすいませんでした。
今悩んでることを率直に聞いてみたいと思います。よろしくお願いします。
今SDI形式でタイピングソフトを作っているのですが、お題が表示され、その下に文字を書きこんでいくという画面でお題となる文字列を表示させるのは簡単なんですが、その下に直接文字を打ちこんでいくという作業がどうやっていいかわかりません。どんな関数を使っていいのかもわからないのでできれば詳しく教えてください。自分の中の考えでこの問題を解こうと考え付いたことはSDIからその画面だけダイアログを表示させてそこに入力させて、SDIにまた戻ってくるということなのですが、これが実現可能なのかとういことを今調べているのですが中々すすみません。そして、やはり文字列の直接入力はSDIでは難しいのでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (2件)

文字を描画するのは


DrawText()
DrawTextEx()
TextOut()
などのAPIを使えば大丈夫でしょう。
色、大きさ、フォントなどを変えたい場合はデバイスコンテキストの操作をする必要があります。ここで全部を書けるほど簡単な処理ではないので本屋さんなり図書館なり行って書籍を当たりましょう。
「Win32アニメーションプログラミング」や「Inside VisualC++」(ちょっと高いか)、「Inside Windows」当りがいいんじゃないでしょうか?

文字の取得は深く考えないならWM_CHARメッセージのハンドラで処理を書き、キーリピートの防止など、いろいろ細工を施すのであればWM_KEYUPやWM_KEYDOWNなどのハンドラで処理すれば大丈夫だと思います。
MFCベースで作られているのであればViewクラスのそれぞれのメッセージハンドラで引数として渡されてきます。

上記の方法では文字列ではなく押された文字やキーが帰るだけですので受け取った入力をもとに文字列に直す必要があります。
    • good
    • 0

あまり参考にはならないかも知れませんが、


同じようなことがあったので書きます。
1.エディットコントロールと同じようなものを自分で作ろうとしました.
2.イベントハンドラーのなかでキーイベントを取り出し処理しようとしたのですが、アルファベットの処理はできるのですが、漢字変換が上手くできません。
文字カーソル(キャレット)の場所を制御できなかったのです。
3.使っていたFEPはエイトクでした。
4.ジャストシステムのホームページにFEPを使って漢字変換するときに必要となる
DLLがあります。
5.このDLLを使えばできると思います。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qwindows media オーディオ形式でCDプレイヤー再生?

windows media playeで音楽CDを取り込んでCD-Rに書き込みたいのですが、取り込む時のオプションの形式でwindows media オーディオやmp3、WAVがありますが、どの形式が一番一般CDプレイヤーで再生するのに適していますか?windows media オーディオ形式でやったとき一般のCDプレイヤーで再生できますか?

Aベストアンサー

WMPを使うのでしたら、WMAで取り込むのがいいでしょう。MP3より音がいいですし、WAV(無圧縮)よりサイズがかなり小さいです。取り込む形式にかかわらず、オーディオCDとして書き込めば、どんなプレーヤーでも再生できます。データCDとして書き込むと、10倍ぐらいの曲数が書き込めますが、対応したプレーヤーでしか書き込めませんので、ご注意ください。

Q文字列中からある文字列とある文字列の間にある文字列を取得

表題にあるとおり間の文字列をどうやって取得するべきかと悩んでいます・・
abcdefghijklmn・・・
となっているとき
bとe、aとkなど間の間隔が不定なときはどのようにして文字列を取得したらよいのでしょうか?
最初の2文字は与えられているとして考えています。
インターネットのURLで言うなら/から/までの間の文字列と言うことになります。
今私が考えているのは
strchrで位置のアドレスを取得してそこからfor文かwhile文で指定の2文字目が出るまでまわすのかなぁ・・と思っています。
ですが具体的にどのような感じに書けばいいのかがわかりません。どなたかご教授ください。

Aベストアンサー

2文字の間でいいのなら strchr() を2回使えばいいと思います。



char *p, *q;

if ((p = strchr(s, 'b')) != NULL) {
 if ((q = strchr(p + 1, 'e')) != NULL) {
  /* p + 1 ~ q - 1 が 'b' から 'e' の間の文字列 */
  size_t len = q - p - 1; /* これがバイト数 */
  printf("%-.*s\n", len, p + 1); /* 出力 */
 }
}

複数の文字の中のいずれかの文字が出現した所で区切りたいなら strpbrk() か strtok() を使えばいいと思います。

Qwindowsとmacで共通して使える動画形式は?

現在windowsを使ってます。
来月あたりに、macを購入しようか検討中です。
つきましては、手持ちの動画もmacに移したいのですが、windowsで見れる動画形式(aviやasf、mpg等)はmacにそのまま移しても見れますか?
見れる形式と見れない形式があるのでしたら教えてくださいませ。

Aベストアンサー

DRM(デジタル著作権管理)付WM(A,V)以外ならデフォルトでは無理でもVLCやMPlayer等のソフトやQuickTimeにプラグインやコーデックの追加で観賞可能です。
aviは曲者でWindowsの動画フォーマットもこれですしDivxもこの拡張子です。
mpg(mpeg)も1と2共通の拡張子ですから開いてみないと解りません。
Macはデフォルト状態ではMPEG2ファイルを開けません。

で、Mac、Windows共通で簡単に観る事の出来る形式・・・。
私の知る限りでは古い規格ですがMPEG1です。
QuickTimeでも何もする事なく再生出来ますし、Realplayerなども他のplayerソフトも全部が再生可能です。
まぁ変換作業を考えたら現実的ではないですけどね。=時間もかかるし画質も劣化する。

問題がないのであればWindowsPCを残しておくか、新しくMacを買うのであればIntelMacだと思いますので、Windowsをインストールしてそちらで起動させて動画を管理する事も出来ます。(恐らく現在お使いのPCのWindowsはインストール出来ないと思います。ヴァージョンその他が解らないの予測でしか有りませんが。)

DRM(デジタル著作権管理)付WM(A,V)以外ならデフォルトでは無理でもVLCやMPlayer等のソフトやQuickTimeにプラグインやコーデックの追加で観賞可能です。
aviは曲者でWindowsの動画フォーマットもこれですしDivxもこの拡張子です。
mpg(mpeg)も1と2共通の拡張子ですから開いてみないと解りません。
Macはデフォルト状態ではMPEG2ファイルを開けません。

で、Mac、Windows共通で簡単に観る事の出来る形式・・・。
私の知る限りでは古い規格ですがMPEG1です。
QuickTimeでも何もする事なく再生出来ますし、Rea...続きを読む

Q特定の文字列をcsvから探して、その文字列を含む行を読み込むには?

例えば以下のようなcsvファイルがあったとします。

ab1,ef2,ab3,af4,ab5
bb1,bf2,bb3,bf4
cb1,cf2,cb3,cf4,cb5
zb1,zf2,zb3,zf4,zb5


プログラムに"cb3"という文字列を探させて、その文字列を含む一行
"cb1,cf2,cb3,cf4,cb5"のみを読み込む方法を探しております。

何か良い方法がございましたら教えていただけませんでしょうか?
よろしくお願いします。

Aベストアンサー

http://oshiete1.goo.ne.jp/qa5709184.html
でやった、fgets + sscanf を使うもう一つの利点は、同じ行に対して複数の処理を行うときに楽、ということです。

文字列の中にある文字列が含まれているか調べるには、strstr関数を使用するか、同等の処理を自作します。
strstrを使用する場合は、#include <string.h>を追加してください。
探す文字列が日本語の場合は、文字コードにも注意してください。

実際の例としては、前回のプログラムに下の+で始まっている行を追加してみてください

while( fgets( buf,600, fp ) != NULL ) {
+/* "cb3"が含まれていなかったら、次のループへ */
+ if ( strstr( buf, "cb3" ) == NULL ) {
+ cotinue ;
+ }
ret = sscanf( buf, " %[^,],%[^,],%[^,],%[^,],%s", s, n1,n2,f1,f2 ) ;

http://oshiete1.goo.ne.jp/qa5709184.html
でやった、fgets + sscanf を使うもう一つの利点は、同じ行に対して複数の処理を行うときに楽、ということです。

文字列の中にある文字列が含まれているか調べるには、strstr関数を使用するか、同等の処理を自作します。
strstrを使用する場合は、#include <string.h>を追加してください。
探す文字列が日本語の場合は、文字コードにも注意してください。

実際の例としては、前回のプログラムに下の+で始まっている行を追加してみてください

while( fgets( ...続きを読む

QWindowsServer2008(IIS7.5)のFTPサイトはIISログ形式(日本時間)が不可?

WindowsServer2008(IIS7.0)までのFTPサイトであれば、FTPログ形式を標準W3C形式から、IISログ形式に変更ができたのですが、WindwosServer2008 R2(IIS7.5)には、どこを探してもそのような設定画面がありません。不可能になったのでしょうか?
Microsoftのページや、Googleで調査しましたが、確固たる「出来る」「出来ない」の情報が見つかりませんでした。

なお、WEBサイトであればIISログ形式の変更は、以前と同じようにできます。
FTPのログ形式が、W3C固定になっている気がします。
※ログ内のファイル日付が日本時間で落ちないので困っています。(-9時間すればよいのですが、日本時間でどうしても取得したいのです)

どなたか、IIS7.5でFTPログをIIS形式で発行する方法をご存じの方いらっしゃいませんでしょうか。

【補足情報】
WindowsServer2008(32bit)は、発売当初(SP無)では、IIS7.0(WEB用)とIIS6.0(FTP用)の2種類がインストールされ、WindowsServer2008(32bit) SP1からは、IIS7.0に統合されたはず。
WindowsServer2008 R2(64bit)では、IIS7.5(WEBもFTPも)になっている。

WindowsServer2008(IIS7.0)までのFTPサイトであれば、FTPログ形式を標準W3C形式から、IISログ形式に変更ができたのですが、WindwosServer2008 R2(IIS7.5)には、どこを探してもそのような設定画面がありません。不可能になったのでしょうか?
Microsoftのページや、Googleで調査しましたが、確固たる「出来る」「出来ない」の情報が見つかりませんでした。

なお、WEBサイトであればIISログ形式の変更は、以前と同じようにできます。
FTPのログ形式が、W3C固定になっている気がします。
※ログ内のファイル日付...続きを読む

Aベストアンサー

FTP サーバーでサポートしているログ形式は W3C のみである、と明記されていますね。
W3C 形式である以上、UTC で記録するのは仕様となりますね。

Windows Server 2008 (R2) + IIS 7.5 の FTP ログ
https://technet.microsoft.com/ja-jp/library/dd722683.aspx

Windows Server 2012 (R2) + IIS 7.5 の FTP ログ
https://technet.microsoft.com/ja-jp/library/hh831624.aspx

QVC++.net SDIで追加したメニューを灰色から黒にする方法

VC++.net 2003 のSDIでプログラムを作っています。
新たにメニューを追加したのですが、実行しても文字が灰色になっており、選択することができません。

手元にある入門書には、フォームアプリケーションの場合は、新たに追加した「メニューをダブルクリックすると、コードエディタに切り替わり、Clickメソッドの枠組みが自動的に生成される」とあるのですが、私の場合、ダブルクリックしても何も起こりません。ネットで検索すると、VC++ ver.6 の情報ばかりで、VC++.net 2003の場合が、いまいちよくわかりません。

「この本に書いてある」という情報でも構わないのでよろしくお願いします。

Aベストアンサー

確信があるわけではありませんが・・・

アプリケーションを実行してメニューを
ダブルクリックしていませんか?
その場合、何も起こらなくて正解です(^^

きっとお手元の入門書にはリソースエディタの
メニューをダブルクリックすると・・・という
趣旨のことが書かれていると思います。

というわけでリソースエディタでメニューを
表示して、それをダブルクリックしてみてください。

Qwindows Liveメール2011の表示形式

お尋ね致します。
今までvista でwindowsメール6を使用しておりました。
一番上のタブには
[ファイル] [編集] [表示][ツール][メッセージ][ヘルプ]の項目のみで
その下には[メールの作成] [返信][全員に返信][転送] ・・・
等の極めてシンプルな表示になっております。記憶は定かではないのですがXPから買い替えた時も
最初はカレンダーなどが表示されておりましたがOutlook Expressのときのシンプルな表示形式に変更したような気がします。

今回、windows7のPCを購入してwindowsメールを開いたところWindows Liveメール2011が入っておりカレンダーなどが表示されていて上部も全く違う表示形式です。この形式をwindouwメール6の私が使用している形式に変えることは出来ないのでしょうか?


ご存知の方、宜しくお願い申し上げます。

質問番号:6743213

Aベストアンサー

>この形式をwindouwメール6の私が使用している形式に変えることは出来ないのでしょうか?

できないですね。
Office Outlookもそうですが、Microsoftの趣味で、メニューはリボン方式になっていますから、慣れるしかないです。
アカウントフォルダが個々になるのは、Office Outlookも一緒です。

メニューバーがあって、OEやWindowsメール方式のUIで、かつ、ローカルフォルダ以下のトレイを複数のアカウントで共通して使ったり、個々のアカウントフォルダでも使えるのは、フリーではThunderbirdになると思います。
Win7で、ユーザー増えてますよ。
http://mozilla.jp/thunderbird/
http://www.dougamanual.com/blog/228/1355/e6303.html

QVC++、MFCでSDIでアプリ作成中

現在、VC++、MFCでSDIでアプリ作成中です。
アイコン上にファイル(txtファイル)をドラッグ&ドロップしてメモ帳を起動したいです。
ただ、ドロップされたファイルはうまく読み込めるのですが、そのファイルを開く(表示)することができません。

ドロップされたファイルは、C○○View.cppで

int C○○View::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;

// TODO: この位置に固有の作成用コードを追加してください
CStringArrayargv;
if( IsDropOnIcon( &argv, TRUE ) ){
inti;
for( i = 0; i < argv.GetCount(); i++ ){
MessageBox( argv[ i ], "ドロップされたファイルは", MB_OK );
Read(argv[i]);
}
}
}

BOOL C○○View::IsDropOnIcon( CStringArray* argv, BOOL acceptFolder )
{
CStringcmdlin = "";
CStringresToken;
char*p;
intstartnum = 0;

p = AfxGetApp()->m_lpCmdLine;
if( strlen( p ) == 0 || p[ 0 ] == '-')
return FALSE;

cmdlin = p;

resToken= cmdlin.Tokenize( "\"", startnum );
while( resToken != "" ){
if( resToken != " " && IsExist( resToken, acceptFolder ) )
argv->Add( resToken );
resToken= cmdlin.Tokenize( "\"", startnum );
};
return TRUE;
}

/* 引数で貰った文字列がファイルかどうかをチェック */
BOOL C○○View::IsExist( CString filepath, BOOL acceptFolder)
{
CFilefp;

if( fp.Open( filepath, CFile::modeRead ) ){
fp.Close();
return TRUE;
}
return FALSE;
}

のargv[i]で取得しています。

これが、Read(arg[i])でうまく読み込めません。
ちなみにRead(CString filename)は正しく動くことは確認済みです。
Read(arg[i])を入れる場所がOnCreateがいけないとは思うのですが、どのタイミングで
読み込めばいいかがわかりません。
どなたか教えて頂けないでしょうか?

現在、VC++、MFCでSDIでアプリ作成中です。
アイコン上にファイル(txtファイル)をドラッグ&ドロップしてメモ帳を起動したいです。
ただ、ドロップされたファイルはうまく読み込めるのですが、そのファイルを開く(表示)することができません。

ドロップされたファイルは、C○○View.cppで

int C○○View::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;

// TODO: この位置に固有の作成用コードを追加してください
CStringArrayargv;
if( IsDropOnI...続きを読む

Aベストアンサー

InitInstance SDI コマンドライン
でググってみてはいかがでしょうか

QWindowsメールをテキスト形式に。Okがない。

Windowsメール HTML形式に設定されています。
テキスト形式に変更するためツール~オプション で テキスト形式に チェックを入れても 下に「OK」がありません。  送る時1回1回変えて送っています。テキスト形式を基本にしたいのです。

Aベストアンサー

次の[すべてのメッセージの形式を変更する方法]の手順の3の画面で、[OK]ボタンがないのですか?
http://qa.support.sony.jp/solution/S0610171019465/#qatopic_chapterAnswerContents_sectionHowto_1

そうでしたら、不具合です。VistaのWindowsメールは、OSの機能も利用していますから、簡単には修復できないので、Windows LiveメールやThunderbirdに移行する手もあると思いますが。

Qread()で読みこんだ文字列の比較について

実行環境はLinuxで、ディストリビューションはturboLinuxです。


strcmpで文字列の比較ができるのですが、何故かreadで読み込んだ文字列は比較できません。
何故なのでしょうか。ちなみにコードは下です

read(sock_ipadrc,&Buf,sizeof(Buf));

if(!strcmp("GETADR",Buf)){

printf("等しい");

}

Aベストアンサー

コードを拝見しました。2点程問題があるようです。

(1) read() の fd に相当する変数名が sock_ipadrc となっていますが、ソケットの場合、ファイルと違って必ず sizeof(Buf) 分読めるとは限りませんので(読める場合もあるので、コードは正しいと思い込まないようにしてください))、sizeof(Buf) に満たなかった場合、再度読み込むというような処理が必要です。

(2) で、Buf に sizeof(Buf) 分読み込めたとして、以下のようにすれば strncmp() を使えば、最後の '?0' を気にしなくても大丈夫です。

if( !strncmp( "GETADR", Buf, strlen( "GETADR" ) ) {
...
}


人気Q&Aランキング