mcrblog

vcpp-ml

1999年08月

31

[vcpp 00032029] Re: SDK で音量を無しにする方法を教えて下さい

吉田です。はずしていたらごめんなさい。

 On 平 11 / 8 / 31 午後 7:40 
 Subject: [vcpp 00032028] SDK で音量を無しにする方法を教えて下さい
 In <1...@tsmtp2.dion.ne.jp>
 yas_bear = Yasuyuki Kashiwagi writes:
yas_bear>一時的に音量を無しにする方法が分かりません。

// フラグ
static int silent_flag = 0;

// 一時的
if( action ){ silent_flag ^= 1; }

// サウンド請負
void sound() {
  if( !silent_flag ) bark();
}

では駄目なんでしょうか?

-- 
as you like... email:v...@ha.bekkoame.ne.jp
PGP finger print=C4B2 52B9 70B4 291B C966  B71F 9B8A 86E1 29B7 6B09
31

[vcpp 00032028] SDK で音量を無しにする方法を教えて下さい

こんにちは。
ヤスです。
環境は VC++6.0 / Win95+IE5 です。

一時的に音量を無しにする方法が分かりません。
MSDN などで調べてみたのですがよくわかりませんでした。

MFC を使わない方法で誰か教えていただけないでしょうか?

よろしくお願いします。


--
31

[vcpp 00032027] Re: Base64のDecode方法


 On 平 11 / 8 / 31 午後 5:59 
 Subject: [vcpp 00032021] Re: Base64のDecode方法
 In <1...@kded5.kde.daikin.co.jp>
 shiumatani = Keisuke SHIMATANI writes:
shiumatani>こんにちは、嶋谷です。

こんにちは,吉田です。

shiumatani>> 行単位で処理するのが普通だと思いますが,CBase64の実装によって
shiumatani>> は行単位にしなくても大丈夫でしょう。ところで,'\0'で終端されて
shiumatani>> いない気がするのですが,その点は大丈夫でしょうか?
shiumatani>
shiumatani># 使っている CBase64 は、行単位で処理するのだろうか???

こちらは私は知りませんです。

shiumatani>確かに、\0 で終端されていないと思います。
shiumatani>ファイルの読み書き方法も良く分からないのですが、どうやって、最後を
shiumatani>検出して \0 を付加すればよいのでしょうか?

CStdioFile::ReadString を使うと長さを調べる必要はありません。
今回は楽じゃないでしょうか?こんな感じ。

CBase64    base64;  /* デコーダ     */
CStdioFile file;    /* テキスト入力 */
CString    line;    /* 行入力用     */
CString    rcvbuf;  /* デコーダ出力 */
CFile      output;  /* バイナリ出力 */
int        b_len;
char      *b_buf;

  while( file.ReadString( &line ) ){
    if( line.Length() == 0 ){
      continue;
    }
    // Alloc 失敗のチェックを省略
    b_buf = rcvbuf.GetBuffer( line.Length() );
    // 出力 bytes を返却されるものとして,,f(^^;
    b_len = base64.Decode( (LPCTSTR)line, b_buf );
    TRY {
      output.Write( b_buf, b_len );
    }
    CATCH( CFileException, e ) {
      // WriteError
    }
    rcvbuf.ReleaseBuffer(); // 必要だろうか?
  }

二つのループをまとめれば,長さのチェックは不要になると思います。

shiumatani>TRY、CATCH とやらもいるのでしょうか?

楽に済ませるならば必要でしょうね。 (^^;)
CBase64には,入力長を指定する手段は用意されていないのでしょうか?
インスタンスがあるという事は,バッファリングも行うのでしょうか?
行単位で処理する(最低でも 4 bytes 単位)方法が無難なきがします。

バッファリングしてくれるなら,ReadFileの戻り値が 入力バッファの
サイズになるはずです。

# 私はどのクラスライブラリも使わない方が安全な気がします。
# 下で呼び出している fopen がちょっと。
# ところで,stream は消えてしまったのでしょうか? > 皆さん

とりあえず,CBase64を使用するなら,よくそのソースをご覧になる
事をお勧めします。(^^)

-- 
as you like... email:v...@ha.bekkoame.ne.jp
PGP finger print=C4B2 52B9 70B4 291B C966  B71F 9B8A 86E1 29B7 6B09
31

[vcpp 00032026] Re: [vcpp 00032020] Re: 複数ページの印刷



さあ(わ?)もとさん、ありがとう。
早速やってみたんですが,やはりだめでした。

実はクリッピング領域を調べたことがあります。
OnPrint関数に入るたび(各ページとも)に、GetClipBoxが
(-7,7,2029,-2029)を返しています(A4縦)。

 IntersectClipRect( x1, y1,x2,y2) はMSDNによれば、
”現在の領域と x1、y1、x2、y2 で指定される四角形と
の交わる部分で形成される新しいクリッピング領域を作
成します。”ということですが、不思議なことに,7ページ目
にいくと、 IntersectClipRectの後ろでGetClipBoxを実行する
と,クリッピング領域が(?、?、?、-10000以上)と帰ってくる。
現在の領域を(-7,7,2029,-2029)とすれば、交わる部分は
この領域を越えないはずですけど。よくわからないけど、
多分IntersectClipRect( x1, y1,x2,y2) を実行すると,
( x1, y1,x2,y2) はそのままクリッピング領域になる。交わると
か関係ないみたい。

プレヴュー通りの印刷結果が得られないのはよくあります。
前も文字の回転は印刷とプレビューは反対方向で回転する
のはありましたけど。
もう本当にいらいらしてきた。

またやってみます。
ありがとう。

> # 推測ですが。
>
> IntersectClipRectで変更したクリッピング領域を戻していないの
> ではないでしょうか?
> SaveDC/RestoreDCを使って元に戻せばうまくいくかもしれません。
>
> ~~~~~~~~~~~~~~~~~~~~~~~~
>   へ  へ    さあもと
>   の  の    E-Mail : s...@suzukisoft.co.jp
> ~~~~~~~~~~~~~~~~~~~~~~~~
31

[vcpp 00032025] Re: ATL のBSTR型

こんにちは。上杉です。

"[vcpp 00032019] ATL のBSTR型"で、
Junji Fukuhara さんは書きました...
>  CStringとBSTRの使い方が根本的に間違っていると思います。
>  なかなか、サンプルコードも見つからず、途方に暮れてます。

BSTR型について、私もうまく説明できないのですが、BSTRのコツというか、
そういうものをちょっといいますと、


1.BSTRは次のように定義されるものである。

typedef WCHAR OLECHAR;                                // WTYPES.H(330):
typedef /* [wire_marshal] */ OLECHAR __RPC_FAR *BSTR; // WTYPES.H(1098):

このため、

 BSTR m_bstrTest;
 *pVal = m_bstrTest;

上記の処理はポインタがコピーされるにとどまり、文字列がコピーされるわけではない。


2.BSTRはメモリの確保と解放に、特殊なWindowsAPIを使うことを仮定した
  ワイドキャラクタの文字列である(と、私は理解しました)。特殊なAPIとは
  SysAllocString系APIとSysFreeStringである。


3.BSTRとは、(おそらく)本来BASICで文字列を扱うための型である。BASICでは
  基本的には関数の呼び出しは値渡しで行われる(はず…)。このため、CでBSTR
  を使う場合は、メモリを解放する責任を誰が負うかを明確にし、十分考慮する
  必要がある。(BASIC同士であればすべて値はコピーされるので、こんなことは
  考えなくてもよいはず。) 


なお、MFCやATLでBSTRを扱うために、いくつか便利な関数やクラスが用意されています。

CString::AllocSysString
A2BSTR / BSTR2A
class _bstr_t

などが代表的でしょうか。これらをヘルプで調べてみることをお勧めします。

#本当は、メモリの解放の責任の所在が明らかというか、明確でないので、
#個人的にはBSTRはあまり好みではないのですが、BSTR使わないでCOMサーバ
#などを作るのは難しそうなので、私も仕方なく使ってます。

************************************************************
    キヤノン販売(株) 中央SE3部3課   上杉  玲
            tel: 03-3455-9856
            E-Mail(Official): u...@cc.canon-sales.co.jp
            E-Mail(Private):  u...@nsc.canon-sales.co.jp
記事検索
Amazon.co.jp
  • ライブドアブログ