プリンタ - みる会図書館


検索対象: API散歩道 下
20件見つかりました。

1. API散歩道 下

ワタソンの呪われた赤い文字 カラープリンタはいいぞ。なんてったって , 色が出るからね。だけど , プリンタにカラーの機能が ついているだけじゃ駄目なんだ。ちゃんとソフトウェアからコントロールできなくちゃ。その点 Ⅳ加 do Ⅳ s なら , ス円のレヘルで , カラープリンタもちゃんとサポートされているから安心さ。だか ら , カラープリンタはいいぞ・・・ ワタソン談 0 ワタソン氏 , 色に狂う ■ワタソン「ほらほら , 見てくれよ。こうやって Excel のサンプルのグラフを打ち出すだ ろ。そうすると , こうやって色っきで印刷されるんだよ。すごいだろう」 「ほおー」 マホラムズ ■ワタソン「そんな顔をするなよ。君もカラープリンタはもっていないだろう。少しは 感動してくれよ」 ホラムズ「カラープリンタを買ったことがそんなにうれしいのかい ? 」 ■ワタソン「うれしいとかそういうんじゃなくて , やつばりすごいじゃない。文明だよ , 技術の驚異だよ」 マホラムズ「君ねえ , カラープリンタくらい昔からあるじゃないか。君が買ったその機 種だって , 1 年以上も前から店頭に置いてあったぞ」

2. API散歩道 下

パネルで設定されるんですよね。 「そのとおり」 「あ , わかりました ! つまり , デバイスコンテキストの作り方を , 色丿 プリンタを選べば」 このサンプルソースの関数を実行すれば , マホラムズ ☆ / ヾステル ☆ / ヾステル ☆ / ヾステ丿レ ☆ / ヾステル ☆ / ヾステル ☆ / ヾステル ☆ノヾステル マホラムス ☆ / ヾステル プリンタドライバはコントロールバネルで通常使うプリンタに設定したまま で , そのコントロールバネルの設定どおりに印字するデバイスコンテキスト が作られるわけですね ! ? 」 マホラムズ「うん , そうだよ。よく見るとわかるとおり , WIN. INI から文字列をとって くるのと CreateDC でデバイスコンテキストを作るのを除けば , やっている ことは『 , 』区切りの文字列をバラバラに分解しているだけだからね。難しく ないだろう ? 」 「最初に思っていたよりは簡単ですね。でも , 質問があります」 マホラムズ「なんだい ? 」 「どうして , プリンタドライバの名前と , プリンタの名前の両方を渡す必要 があるんですか ? 」 ▽ホラムズ「うん。それはいい質問だね。考えてみたまえ。世の中には , ものすごくた くさんの種類のプリンタが存在しているだろう ? 」 「そうですね」 マホラムズ「ほとんど数え切れないくらいの機種が世に送り出されてきたからね。でも 同じシリーズのプリンタなら , 機能やコマンドやページ記述の方法はよく似 ていることが多いから , 少しの差を別にすればほとんど同じプリンタドライ バでかまわないわけだ」 「あ , そうですね。 ESC/P とか PostScript とか , そういうのがありますね」 マホラムズ「だから , 似ているプリンタはひとつのプリンタドライバで扱うことが多い んだ」 「でも , 似ているといっても少しずつ機能が違うんですよね」 ホラムズ「そうだ。それに対応するためにプリンタの機種名も引数で渡すようになっ ているんだ。例えば , 内容は同じで , 内蔵されているフォントの数が違うだ けのプリンタが 2 台あったとしよう。 こういう場合 , プリンタドライバは自 分に渡されるプリンタの機種名を認識して , フォントがいくつ使えるのかを 自動的に判別することができるわけだ」 「あ , なるほど。そういうことですか」 「例えば , ほら , 日本語 Windows の CONTROL. INF ファイルを見るとよくわ かるよ。ひとつの EPSON_J. DRV というプリンタドライバで , 実に 1 8 機種 もカバーしているから」 「あ , ほんとだ。すごいですね」

3. API散歩道 下

プリンタの能力を知る方法 ☆パステル「はい ! わかりました ! 」 ないからね」 だ。仕組みがわかってしまえば , こっちの方法でプログラムを組んでかまわ ないままになるから , Windows3.0 の SDK のサンプルソースで説明したわけ ホラムズ「そのとおり。だけど , それではプリンタに関するいろいろな疑問がわから ☆パステル「それじゃあ , なにもしなくても PrintDIg を呼ぶだけでいいんですね」 バに返ってくるという仕組みだ」 成されたデバイスコンテキストのハンドルが PRINTDLG 構造体の hDC メン 構造体の日 ags メンバに PD ー RETURNDC というビットを立てておくと , 作 キストまでお任せで作成してくれる機能がある。具体的には , PRINTDLG 印刷コモンダイアログにはデバイスコンテ ている。ところが面白いことに を利用しているわけだ。 PrintDIg という A 円がコモンダイアログを呼び出し マホラムズ「ここでなにをしているのかというと , コモンダイアログの印刷ダイアログ ☆パステル「わあ , ずいぶん違いますね。簡単というかなんというか」 「用紙サイズなんかはどうなるんですか ? 」 まま使って説明しなかった最後の引数まで使ってもすべてを特定できない」 「うん , その 2 つだけではすべての機能を特定できないし , さっき NULL の 駄目なんですか ? 」 「 CreateDC のように , プリンタ名とプリンタドライバ名の両方を指定しても くれるような A 円は存在しないんだ」 マホラムズ「だから , プリンタやプリンタドライバの名前を指定してその能力を調べて 「確かにそうですね」 できる範囲のサイズは変わってしまうからね」 アログから機能を変更できる場合もある。しかも , 用紙を取り換えたら印字 を入れているかで機能が変わるものもあるし , プリンタドライバの設定ダイ なっている。それに , インクカートリッジにモノクロを入れているかカラー ばわかる。けれど , いくつかの設定はユーザーが自由に選択できる仕組みに マホラムズ「例えば , ある機種のプリンタの機能はカタログやマニュアルの仕様を見れ 「どういう意味ですか ? 」 マホラムズ「プリンタの能力とーロにいっても , いろいろと微妙な問題があるんだ」 「待ってました。そこが知りたいんです」 マホラムズ「では , そろそろ本題に入っていこうか。プリンタでカラーを扱う方法だね」 ☆ / ヾステル マホラムス ☆ノヾステル ☆ / ヾステル ☆ / ヾステ丿レ ☆ / ヾステル

4. API散歩道 下

第 5 章 ワタソンの呪われた赤い文字 マホラムズ「それだけじゃない ? 」 ☆パステル「私の下宿では 2 時間も粘ったんですよ。それだけじゃないんです」 ホラムズ「確かに迷惑なャツだなあ」 ついでは , パソコン友達の間をあんなふうにぐるぐる回っているんです」 ☆パステル「は一い。ほらね , ワタソン先輩ってあんな調子なんですよ。プリンタをか マホラムズ「ふう , もう出てきても大丈夫だよ , パステル君。ワタソン君は帰ったよ」 ■ワタソン「いそいそ。やつばりプリンタはカラーだ ! 」 マホラムズ「ああ」 ラムズ」 大学時代の悪友のあいつのところに行って自慢してやろう。またくるよ , ホ ■ワタソン「と , ともかくだ。カラープリンタはやつばり感動もんだよ。よし , 今度は マホラムズ「わからなければ , いいんだ」 ■ワタソン「へ ? 」 そういうニーズばかりだし」 Mac にもち込んで , それを出力センターで出すからいいんだよ。僕の場合 , マホラムズ「カラーで印刷したいときは , EPS ファイルに落として AppleFileExchange で リンタももってないくせに知ったような態度はよくないなあ」 が違うじゃないか。ちょっと Windows の知識が豊富だからって , カラープ 0 ワタソン「でもさ , 自分のもっているプリンタで打ち出せるとなると , やつばり感動 を、金局ー ! をつ民ツとを京トこ !

5. API散歩道 下

ノ第 5 章 ワタソンの呪われた赤い文字 字ができるようになるわけだ」 etc. オプション フォント 背景色 出力色 出力先 Windows GDI hDC いち多くの設定をしなくてもすむ hDC を引数にして出力するといち TextOut(hDC, TextOut(hDC, ・・・ ); TextOut(hDC, 図 3 多くの設定は h DC というハンドルに集約して保持される 「あ , わかりました。それじゃあ , プリンタとかで印字するためにも hDC が 使えるんですね ? 」 、「そのとおり」 「じゃあ , プリンタにもウインドウハンドルがあるんですか ? 」 V ホラムズ「え ? プリンタにウインドウ ? 」 マホラムズ ☆ / ヾステル ☆ / ヾステ丿レ ☆ / ヾステル ☆ / ヾステ丿レ マホラムス ☆ / ヾステ丿レ 「こんな API だよ ( 図 4 ) 」 「初めて聞く A 円です」 正しいよ。これを行うもっとも基本的な A 円は CreateDC というんだ」 ホラムズ「デバイスコンテキストは取得するというよりも , 作成するといったほうが 「誤解ですか ? 」 マホラムズ「ははあ。また誤解をしているなあ」 ンドルが引数に必要じゃないですか。 BeginPaint とか GetDC とか」 「だって , デバイスコンテキストを取得する A 円は , どれでもウインドウハ

6. API散歩道 下

第 5 章 ワタソンの呪われた赤い文字 ・リスト 1 プリンタへのテパイスコンテキストの取得方法 (Windows3.0 SDK の PRNT 日 LE サンプルプログラムより ) HANDLE GetPrinterDC() char pPrintInfo[80]; LPSTR lpTemp : LPSTR lpPrintType; LPSTR IpPrintDriver; LPSTR lpPrintPort; if (!GetProfiIeString("windows" return (NULL) ; pPrintInfo; 1 pTemp IpPrintType lpPrintDriver IpPrintPort while (*IpTemp) ー if (*lpTemp = * lpTemp + + while (*IpTemp lpTemp = AnsiNext(lpTemp) ; if (!lpPrintDriver) lpPrintDriver IpPrintPort break; (LPSTR) ” l)evice' pprintlnfo, 80 ) ) 1 pTemp ; e I se ー 1 pTemp ; e 1 se lpTemp = AnsiNext ( lpTemp) : return (CreateDC(IpPrintDriver, lpPrintType, IpPrintPort, (LPSTR) NULL)) ; ☆パステル「あ , 見たことがあります。 WIN. INI の先頭のほうの , 確かデフォルトのプ リンタの指定ですね」 マホラムズ「 3 つの名前が『 , 』で区切られていて , 最初はプリンタそのものの名前 , 2 番 目はプリンタドライバのファイル名 , 最後は出力先のポート名だね」 ☆パステル「はい , そうですね」 マホラムズ「これは , CreateDC の最初の 3 つの引数に , そのまま渡せるような文字列に なっているんだ。つまり CreateDC の最初の 3 つの引数は , それぞれプリンタ ドライバのファイル名 , プリンタそのものの名前 , 出力先のポート名なんだ。 順番は違っているけれど , それぞれの文字列をそのまま渡せるわけだ」 ☆パステル「最後の引数は NULL になってますけど」 ホラムズ「これは , 用紙やそのほかの設定をプリンタドライバに渡したいときに使う ものだが , コントロールバネルで設定した用紙など , ほかと同じ設定で印字 したい場合は NULL でかまわない」 ☆パステル「あ , ちょっと待ってください。 WIN. INI の DEVICE = って , コントロール

7. API散歩道 下

プリンタの能力を調べるい ☆ / ヾステル ☆ / ヾステル ☆ / ヾステル ☆ / ヾステル ☆ / ヾステル ☆ / ヾステル ☆ / ヾステル ☆ / ヾステル ☆ / ヾステル ☆ / ヾステル 「・・・・・頭が混乱してきました」 マホラムズ「なるほど , わかったよ。君は hDC を誤解しているようだね」 「 hDC ってデバイスコンテキストですよね。それなら知っていますけど。 インドウに描くときに使うハンドルでしよう ? 」 マホラムズ「本当の意味は , そうじゃないんだ。そこから説明を始めよう」 「はい ! 」 ウ マホラムズ「デバイスコンテキストというのは , デバイスへの出力のコンテキストをも っているハンドルだ」 「え ? え ? なんですか , それは」 マホラムズ「出力用のデバイスには , ディスプレイとプリンタがあるね。まあ , ほかに もプロッターなんかもあるけれど , これはプリンタの仲間としよう」 「はい」 マホラムズ「これに , なにかの文字や絵を出力したいとする。デバイスにデータを送り 出してやればすむ話なんだけれど , ちょっと考えてみたまえ。例えば文字列 をひとっ打ち出すためにはどれくらいの情報が必要か」 マホラムズ「それじゃあ , 例えば TextOut という文字を打ち出す API にいくつの引数が 必要になるかを考えてみようじゃないか。まず座標と文字列は必要だね」 「はい ! 」 ホラムズ「それから , 使用するプリンタドライバやディスプレイドライバの名前 , 出 力に使うポートがプリンタポートの 1 番か 2 番か , それとも別のどれかの指 定 , 印字する色の指定やバックの色の指定 , フォントの種類 , サイズ , ポー ルドやイタリックなどのオプション指定 , それから・・・・・・」 「そんなにあるんですか ! ? 」 ホラムズ「もっとたくさんあるよ。でも , このへんで終わりにしておこう。つまり , 単に出力するだけでも膨大な情報が必要になるんだ。これを全部引数にして 一度に渡すのは , 煩雑すぎてちょっと現実的じゃない」 「そうですね」 マホラムズ「だから , 出力のコンテキストというものを用意したわけだ。コンテキスト というのは文脈とでもいったらいいのかな。ある一連の文書を打ち出すとか , あるウインドウに描画するとか , そういった連続した出力を意味するんだ」 「 hDC ってそういう意味なんですか」 マホラムズ「そう。コンテキストには , いろいろな情報をもたせておくことができる。 だからコンテキストに対して色やフォントの情報を設定しておくと , TextOut という A 円はコンテキストと座標と文字列を指定するだけで文字の表示や印

8. API散歩道 下

第 5 章 ワタソンの呪われた赤い文字 マホラムズ「まず , なにから知りたいかな ? 」 いいんだ。例えば , 画面に赤でバカと描きたかったらこんなコードを書くだ マホラムズ「どんなテクニックもなにも , ウインドウに描くときとまったく同じ A 円で 「じゃあ , どんなテクニックを使うとカラーで印字できるんですか ? 」 マホラムズ「とくにそんな API はないんだけどなあ」 「カラーで印字する API をお願いします」 ☆ / ヾステル ☆パステル ☆ / ヾステル マホラムス ☆ノヾステル ・「そのとおり」 するわけですよね」 「つまり SetTextCoIor で赤 =255, 緑 = 0 , 青 = 0 に設定し , 図 1 普通の文字の表示処理 TextOut (hDC ′ 0 ′ 0 ′“バカ“′ 4 ) ー Se セ Tex セ C010 て ( DC ′ RGB ( 255 ′ 0 を 0 ) ) ー ろう ? ( 図 1) 」 v ホラムズ「いや , これはプリンタにも使えるよ」 「これってウインドウに描くための API じゃないんですか ? 」 TextOut で出力 TextO utA 曰 図 2 画面もプリンタも同じように扱う

9. API散歩道 下

プリンタの能力を知る方法を気 でも取得できる情報が多いですね ! 」 マホラムズ「主なものだけ説明しよう。とりあえず使いそうなものは , んだろうな ( 図 6 ) 」 ・ HORZRES ざっとこんなも 出力デバイスの横方向のピクセル数。 SDK のマニュアルには「ディス プレイの」と書かれているが , プリンタの印刷可能な範囲の横方向のド ット数もわかる ・ VERTRES 同様に縦方向のピクセル数 ・ LOGP 工 XELSX 1 インチあたりのピクセル数 ( 横方向 ) 。これも同様に 利用 OK ・ LOGP 工 XELSY ・ PLANES 1 ピクセルあたり何ビット使用しているかを示す ・ B 工 TSP 工 Xをも 同様に , 1 インチあたりのピクセル数 ( 縦方向 ) プリンタにも 表示または印字バッフアが何プレーン存在するかを示す 図 6 GetDeviceCaps のパラメータ ☆パステル「これで , 知りたいことはほとんどわかっちゃいましたね」 マホラムズ「ちなみに , 注意する点は色数の確認方法だ。白黒の 1 ビットモノクロより色 数を多くする方法は 2 種類あって , 直接ビット数を増やす方法と複数のプレ ーン数を重ねてビット数を増やす方法がある。それぞれに対応したパラメー タがあるというわけだ。だから正しい色数を得るためには , BITSPIXEL で 取得した値と PLANES で取得した値の両方を使わなければならない。具体的 には , この 2 つを足せば 1 ピクセルあたりの総ドット数が算出できる。その 値の 2 のべき乗が色数というわけだ」 ☆パステル「具体的にはどう計算するんですか ? 」 マホラムズ「総ビット数を出すには『 FullBits=GetDeviceCaps(hDC, BITSPIXEL) 十 GetDeviceCaps(hDC, BITSPIXEL); 』とする。そして , そこから色数を出す には FullBits); 』という計算をする。 power はべき 乗する関数で , 作るとすればこんな感じの内容だ ( 図 7 ) 」

10. API散歩道 下

リ 物第 5 章 ワタソンの呪われた赤い文字 ☆パステル「そうですね。ところで , どうして Windows3.0 のサンプルソースをもち出し ならないプリンタドライバもあるけどね」 マホラムズ「もっとも , なかには自動判定をしないでユーザーが機種名を設定しないと てきたんですか ? 」 ホラムズ「ふむ」 ☆パステル「なぜ , 3.1 のサンプルじゃないんですか ? 」 マホラムズ「実は , もっと楽をする手段があるんだ。それを最初からもち出すと , のような説明をしてあげる余地がないんでね」 ☆パステル「なんですか , その手段って」 いま マホラムズ「じゃあ , こっちを見てみよう ( リスト 2 ) 。これが Windows3.1 の SDK のサ ンプルソースだよ。要点だけを抜き出しておいた」 ・リスト 2 プリンタへのデバイスコンテキストの取得方法 (Windows3.1 SDK の PRNT 日 LE サンプルプログラムより ) PRINTDLG pd ; ( 中略 ) ( 中略 ) / * [ プリンタの設定 ] コモンダイアログの * / / * 構造体 / * 値が変更されない PRINTDLG 構造体のメンバを設定 * / pd. lStructSize pd. hwnd0wner pd. hDevMode pd. hDevNames pd. Flags pd. nCopies = s izeof (PRINTDLG) : = hwnd; = NULL ; = NULL ; = PD_RETURNDC ー PD_NOSELECTION ー PD_NOPAGENUMS ; HDC GetPrinterDC(void) HD C ( 中略 ) hDC ; if (!PrintDlg((LPPRINTDLG)&pd)) return(NULL) ; if (pd. hDC) hDC = pd. hDC; e I se ( 中略 ) return(hDC) ;