「初期化」を含む日記 RSS

はてなキーワード: 初期化とは

2019-05-11

ポケットWi-fiを1年使ってみた感想

暇なのでポケットWi-fiを使ってみた感想を書く。

これからポケットWi-fiを買おうかな、と考えている方の参考になればな、と思います

契約内容使用機種など

Broad WimaxSpeed WI-FI NEXT WX04を4年契約で使っています

現在2年目で、月々の支払い額は3300円ほど(うろ覚え)。

現在は知らないが1年前では上位のモデル

4年契約にすることでWifi回線だけでなく、au回線無料で使えるようになるのが特徴。

通信制限はWI-FIを使うだけなら3日間で10GBを超える、もしくは、1月au回線使用して10GBを超えた場合に発生するらしい。

使用状況

私は一人暮らしです。スマホ使用時間は1日あたり3時間ほど(スマホバッテリー使用状況の値)で、ツイッターゲームをよくします。

自宅にいる時はもちろんですが、遊びに行く時や職場に行く時にも持ち運んでいます。ただし、職場に入ってからは電源をオフにしています

感想(メリット)

携帯通信量が1〜2GBほど減りました

携帯通信量が抑えられて、月々2GB以下に抑えられています(^^)

最近携帯が定額ではなく、従量課金制のプラン(1GB以下なら○○円、2GB以下なら○○円、3GB以下なら○○円のようなプラン)になったので、これは大きいです!

過去Wi-fiは使ってましたが、ポケットWi-fiではなかったので、外出中はWi-fiが使えませんでした。

その状況から比べると1000円〜2000円分くらいは抑えられている計算になります(^^)

PCも外出中にWi-fiで繋げられる

これも意外と大きくて私は家の中では集中して作業ができないのですが、ポケットWi-fiがあることで外出中にPCネットなどに接続できるようになりました!

au回線が使える

WI-FIだけだと結構使えない場所があります。1m離れるだけで通信環境は大きく変わります

でもそんな時もau回線があれば大丈夫。さすがはau、だいたいのところは繋がりますau回線も使えるモードがあるのはありがたかったです。

ちなみに私の場合バスで長距離を移動する場合や、喫茶店PC作業をするときau回線を使っています。(喫茶店の席によってはWI-FI環境が悪いお店があったりするので、そのような場合au回線を使ってました。)

感想(デメリット)

通信制

一度通信制限にかかると解除する方法時間経過しかありません。

私はau回線を用いて月に10GB以上使ってしまって通信制限になってしまたことがあります

その時は最悪で、スマホとは違ってお金を払って通信制限を解除することが出来ず、制限解除になるにはただただ月末を待つしかありませんでした。

Wi-fi通信制限になるとスマホはまだ4Gを使えば快適に過ごせるのでいいのですが、PC回線Wi-fi頼みなので非常に苦労しました。

ただ、この点はそれ以降はau回線使用するモードにあまりしないことで解決しました。

年に5〜6回は初期化必要

急に不調になる時がしばしばあります。Broad Wimaxau店でサポートが受けられるそうなのですが、au店に持っていっても「修理に出しましょう」としかいいません。

でもそんな時も初期化すれば大体の問題解決します。

だいたい1〜2ヶ月ごとには初期化必要事態になっています

(ちなみに初期化必要事態の時はWI-FIに繋がらないので、そういう事態が頻発に起こります。)

勝手ボタンが押されている

よくズボンに入れているのですが、触ってないのに勝手に誤動作します。

週に1回くらいは誤動作します。

おそらくズボンポケットで何かにあたって誤動作してるのでしょうが、かなりやばい動作します。

例えば次です。

  1. 勝手英語表記になる
  2. 勝手スケジュールが設定される
  3. 勝手au回線を使うモードに変わる
  4. 勝手周波数が5GHzに変わる

特に後者2つが最悪で、au回線使用するモードに切り替わることが月1ペースであります

勝手に5GHzに変わるのも最悪で、電磁法で5GHzを外出中に使用するのは違法のはずです。

またスケジュール勝手に設定されるのもかなりの不快です。

スケジュール10時になると自動で電源オフになる機能なのですが、これが勝手に設定されていると10時になったら勝手Wi-fiが使えなくなります

ゲームいいところなのに〜!!ってなります

こういう誤動作ポケットWi-fiを使っている上での一番のストレスです。

電源オフにしにくい

普通電源オフにする場合ボタンを長押しするだけじゃないですか?

WX04は違います

電源ボタンを長押しした後に画面に選択肢が出るので、その中から電源オフを選ばないといけません。

まり、画面を見ないと電源オフにできないわけです。

これは個人的には機能的欠陥だと思っています

例えば、Wi-fiを使ってはいけない地帯に電源を切らずに入ってしまった場合、すぐさま電源をオフにしたいところですが、電源をオフにするためには画面を見て選択肢を選ばないといけません。

他人の目があります。なるべくならWI-FI機械を触っているところを周りに見せたくありません。

それなのに電源をオフにするためには、画面を見て選択肢を選ばないといけないのです。

不便で仕方ありません。

Wi-fiが使えないことが結構よくある

週1ペースでなぜか繋がらなくなる時が出てきます

5〜10分ほどでなぜか直ることが多いのですが、まれに1時間ほど電波が不調になることもあります

機械自体が不調なわけではないようで、初期化しても治らないこともよくあります

でもまあ週1なので我慢できるレベルです。

それなりに繋がらない場所がある

メリットの方でも触れましたが、繋がらないところは結構あります

ちなみに東京なので田舎ではありません。

1〜2m動くと繋がりやすいところに変わったりするので、ポケットWi-fiの置き場所を工夫すればだいたい解決します。

まとめ

買って損したとは思いませんが、機能的に残念なところは結構あります

1人暮らしなら携帯代の節約などで便利ですが、家族使用する場合ポケットWi-fiメリットが薄れるのであまりオススメしません。

電源切るときに画面を見なくても済むようにしてくれて、ポケットに入れてるとき誤作動しないようにしてくれれば満足できるレベルにはなります

2019-05-07

適応障害だ!優しくしろ

眠れん!起きれん!障害だ、仕方がない。

薬をくれ!価格はもちろん3割負担

今日は休む。仕事よろしく適応障害だもん、有給休暇だし。

気分が躁鬱。周りに当たりまくる。でも適応障害だもん。障害者だよ?薬飲んでるよ?

休職するわ!労働者権利だ、金をくれ。

転職決まった。引き継ぎ?私をこんなにした会社になんで残さなきゃ駄目なの?PC初期化データ削除。

適応障害治ったわ。私の人生これからわ!

先月会社を辞めたババア。同僚やそいつの友人にさんざん迷惑かけたけど、適応障害の錦の御旗で全て回避

こんな事言うと「ブラック企業被害者面するな!」とか言われそうだが、至ってホワイト(それはお前が奴隷からだ!と言われたら反論のしようがない)

ババアが気に入らないことがあって、勝手ダメージ食らって、勝手身体拒否反応起こしただけ。なのに医者は病名つけてババアが暴れてもOKライセンスを発行しやがった

もちろん辞めたから良いんだが、これ以来ADHD発達障害適応障害、鬱への嫌悪感が酷くなった。もちろん厳密にはどれも違うんだけど、正直詐病しか

ごく一部の厄介が暴れているだけで、大半は静かに過ごしているのだろうけど、もう薬あげてカウンセリングとか止めて施設で何週間か過ごすみたい公的措置をやってほしい

転職したらケロッと治る当事者は良いけど、周りはそうそう治らない傷を負うのだから

2019-04-14

[]

ゼロシム解約するからちょー久しぶりにもともと契約してた格安SIMに切り替えた

スマホ初期化したせいもあって初期設定少し手間取ったけどなんとかつながってよかった

ぺいぺいをはじめて登録して設定してみたけどいまいちなんかしっくりこない

実際にレジで支払ってみないとわからん

2019-04-05

おーい、C#大好き増田ー、教えてくれー

このコードスッキリさせてくれー! 頼む!

MemoryStream mem = XXX;//なんか初期化されてるとする

int b=mem.ReadByte();

while(b != -1){

//処理

}

2019-03-23

anond:20190323211511

かい文法とかへのツッコミは置いといて、statusを""で初期化して直後にそのifにかけたら必ずelseの方に分岐して食事に誘うことになるぞ

let status = hasLover();

に書き換えよう

2019-03-22

なにもかもめんどくさくなってしまった

win7ラップトップがもうだめ。

重要更新ダウンロードまではできるんだけどインストールできない?みたいな状態でずいぶん放置していると思う

そもそもこいつはもうバッテリーがぶっ壊れていてそこからなんとかしないと、交換するならついでにメモリも4から8に増やしたい

必要なのかよくわからないメールなどのデータ曖昧に残っていて、消えてもいいんじゃないか?と思うし、念のため取っといた方がいいんじゃないかと思うし、こいつに刺したUSBを他のPCに刺したくねえなとも思う

初期化してWindows10をぶっこみたい、と思ったんだけどこいつ要件満たしてるのかなDirectX9とか怪しいな。ネトゲできてたしギリ満たせているような気はしなくもないが……ギリギリで、ちゃんと動くのか?

などと考えていたらなにもかもめんどくさくなってしまった。というかめんどくさくなってしまって2年くらい経つと思う。6年前はメインで使っていたのに

今のメインはwin8.1のデスクトップ10に上げ損ねててそろそろ上げるかどうするかという感じ。これもめんどくさい。スペック大丈夫だとおもうけど

古いやつのことを忘れてラップトップを新調するかどうかは迷う。使うのか?でも外に持って行けた方が便利なこともあるだろう。勉強会とか(PCに対する理解意識レベルがこんな低くて勉強会に行く意味あるんだろうか)

新調するとしてwin10入ったやつにするか、もうWindowsのこと考えるの嫌になったかMacにするのか、それだとメイン機とのデータ互換性が微妙になるんじゃないか?などとどんどん面倒になる

新調といえば外付けHDD10年くらい使ってる気がするから新調する必要があるのか。これをとりあえず最優先にするといい気がする

とりあえずもろもろ新調するとしてAdobe系とクリスタSAI、あとは開発とかできてunityとかblenderとか使えるといい。ネトゲはできなくていいや。とか考えるとそこそこスペックいると思う。高そう

SAIってWindowsしか使えないんだっけ? うーん……

あと古いipodに入ってる音源をなんとかするのも8年近くさぼっている。持ってる音源youtubeで聴いてるし買ったCD開封してなかったりする。もうだめだ

学生時代ツタヤで借りまくった音源、下手したらデータ消えてるんじゃないかなと思う。通電してない期間が長いし

色んな事の整理が苦手でなにもかもめんどくさい。外付けはなるはやで買う

2019-03-15

こんな仕事にも適性があるらしい

情シス社内SEの悩ましい話。


ウチは300人ちょっと会社で、業務内容はほぼ海外取引オンリー

からバックヤード部門を除き社長からヒラに至るまで、正社員は必ず年数回、海外出張に出かける。

というか人によっては、日本にいるのは1年のうち数日だけなんてケースもある。

かと思えば春節かよ!とツッコみたくなる帰国ラッシュが年数回あったり。

社員が使うPCは基本Windowsだが、中にはMacという人もいる(正直やめてほしいが)。


そんな会社ITを支える我が情シスは、以下のメンバーで成り立っている。

  1. サーバスイッチ担当
  2. ストレージアプライアンス担当
  3. セキュリティPC担当

ここで問題になっているのが、最後に挙げたセキュリティPC担当の定着率。

基本的新人も中途も、登竜門として最も技術難易度が低いというか、そこまでガッツリ勉強しなくとも務まるセキュリティPC担当仕事力を鍛えてもらう。

しかし、さほど難しくないはずの当該業務は、現実としてデキる人と全然ダメな人にはっきり分かれてしまう。


ちなみに全然ダメなのは決まってプログラマ上がりないし、「学校ではプログラミング好きだったんですよー」というタイプ

たいてい、毎日3時間も4時間も謎の残業をした挙げ句、それだけ頑張っても3ヶ月と保たず業務に支障を来たし、「すいませんクビにしてください」と言って辞めてしまう。

これが不思議でならない。

だって業務と言っても、大して難しくない、こまごましたタスクがあるだけなのだから

一応列挙すると

だいたいこんな感じである

というわけで、一つ一つの作業は大した事ないというか、むしろ簡単なのがおわかりいただけるだろうか。

それこそマニュアル不要レベルだし実際マニュアルはないし、それでも今の社員数なら一人で回せる。

からプログラムなんてバカには絶対できない作業が行える人間が、この程度のことでつまずくというのが、ちょっと信じ難いのだ。

いやもうマジで「どうして?」と頭を抱えてしまう。

何が問題なのか、教えてほしいわ。

2019-03-04

私の脳内メモリ勝手初期化される件

あがり症なのかもしれない。

小学生の頃は大丈夫だったんだけれど、

中学生くらいから男女の差を意識するようになり、

何故か発表系が苦手になってしまった。

人前に出ると凄く緊張して

話そうと思った言葉デリートされていく。

「人が見ていない」状況、後を向いてくれていれば上手くプレゼンできると思う。

頭の中や、事前練習では「ここのとこ、どうですかAさん!」

「え?朝ごはんチャーハン?すごいですね。」とか変な事も言える気満々なんだけどね。

人の目がダメだ。異常に緊張するし、何故か失敗してはいけないという考えになっちゃうんだ。

社会人になり、電話に出るのが怖かった。

ちゃんで、友達や身内以外に電話をかけたことなんて無かった。

営業電話に出てしまい「息子さんですか?」と聞かれたのが話のネタにはなるけど微妙気持ちにさせられた。

電話に出るときに声を変えないといけないとか誰が決めたんだ…。

テレビの影響で「出たら必ず怒鳴られる」という意識もあったから、入社して1年電話に出れなかった。

出よう出ようと思っても、どうしても出れなかった。どうしても怖くて仕方なかった。

目の前にいる先輩が「じゃぁ、俺がかけるから取って」と言って電話を取り練習した後、すんなり取れるようになった。

電話をかけてくる人は基本的に社内の人達なので、良い人ばかりだった。

人に教えることも多々ある部署なんだけれど、発表は未だに苦手。

例会というものがあり、毎週「先週の出来事」について発表する。

発表して話しているうちに頭がどんどん真っ白になっていき、結局何を言いたいのか、どこまで言ったのか分からなくなり

勝手に途中で話を終わらせてしまう。たぶん大丈夫だろう、という意識も少しある。

この、頭が真っ白になっていく感覚が凄く嫌いだ。

最近物忘れが激しいのもあり、いろいろと心配になってしまう。

大丈夫だろうか。

2019-02-08

アレな動画をどうするか

割とよくある話だよね。俺の場合、使ってるノート PCHDD スロットと M.2 スロットが付いているので、M.2 の方にシステムを入れて、大容量の HDDHDD スロットに挿してる。で、その HDD の方に動画を……だな、その、溜めているわけだ。

でも、俺が急に命を落としたり、あるいは身動き取れない状態になったとき関係者が俺の PC 漁ってこれが出てきたら……と思うと、いつも不安になるわけだよ。どうするのが一番いいんだろう。

    • 断捨離とばかりに全消去(え、え、えぇぇぇぇ)

    ……どうしよう、と思いつつも、昨夜また俺の HDD の内容物は増えたのだった。

    2019-01-15

    親父と正月喧嘩した件について

    gdgdだが、吐き出す。どうにも許す気になれん。

    親父は昔からパワハラ気味&上から目線なところがあって、辟易していたんだが、マンションも買い与えてくれたし、5年くらいまえから生前贈与だ、といって税金がかからない範囲で少しずつ金を振り込んでくれてる。

    世間一般には良いほうの部類に入るのかもしれん。

    俺はSEをしていて、実家パソコン3台を数年前に買い替えた時も、無線LANとか、プリンタとか、OS認証とか、一通り半日かけて設定してやった。

    今年の正月元旦に顔をだして、相変わらずパワハラ気味な所とか、俺のほうがまだ年収は上だしなとか(子供相手に何言ってんだ、という話)、そういう親父に愛想笑いして帰ってきたのだが、3日の朝に電話があって、

    親父が年賀状を作っているパソコンが動かないから直しにこい、と喚いていた。片道大体1時間位なんだが、正月休みの朝の9時に叩き起こされたので、午後から行ってやる、と言って、午前中は2度寝していた。

    14時位に実家に行くと、早く直せ、宛先の印刷が出来ないだろ、と喚いていたので、ググって出てきた郵便局年賀状作成フリーソフトを動いているPCに入れてやって、それで印刷しとけ、と黙らせてから動かなくなっていた

    VAIOを見た。純正の診断ツールを走らせて、ハードディスクを修復して、何回やっても、「windowsが正しくシャットダウンされませんでした」という例のエラー回復画面から起動しない。セーフモードでも起動しない。

    診断ツールの走りが遅かったのでここまで3時間タバコを吸っていると、タバコ吸う暇あるならさっさと直せ、と親父が喚いてくる。ツール走らせてんだよ、ボケが。素人は黙ってろ、と思ったがそこまではその時は

    言わなかった。

    もうめんどくせーから初期化するか、と決断して、親父にデータ全部消していいか、と聞いたら、過去何年分かの年賀状データと宛先のデータ写真は救いだせ、と喚く。後出しだが、親父は昔、役人をしていて、

    俺がガキの頃から12月1月初めは年賀状作成バカになる。宛先をきっちり管理し、毎年律儀に数百枚出す。そんなに大事ならバックアップとっとけよ、と思ったが、VAIO純正ツールデータ救出みたいな項目があったので、

    それを走らせてみた。救出するフォルダを選べ、と画面が出てきたので、年賀状作成ソフトフォルダまるごとと、住所録の簡易データベースみたいなものがあるらしき場所と、ピクチャフォルダを丸ごと指定して、

    外付けのHDDコピーを開始したら、「終了まで8時間」とか出た。まあ、古い外付けHDDだし、コピーしていくうちに画面の時間表示も減るだろう、と思って、お袋が用意してくれた晩飯を食った。

    すると、先に飯を食い終わった親父が画面表示に気がついて、「8時間とはどういうことだ」「お前はここで徹夜すんのか」「いや、むしろ終わるまで帰るなよ」と喚き出した。丁寧に説明してやっても良かったんだが

    さすがにキレてしまった。喧嘩口調に切り替え、5分位罵りあったのだが、「だったら、修理にだすわ」と親父がほざいたので、「ああ、そうかい」と言って、お袋に帰るね、と言って帰り支度を始めた。青ざめた顔を

    して見ていたお袋もなんとなく頷いてくれたので、帰ろうとしたら、親父が「仕事を投げ出して帰るのか」とか色々ほざきだしたので、「修理屋さんが直して下さいますよ」と嫌味たっぷりに言ってその日は帰ってきた。

    翌日。朝の9時半、10時に親父の携帯から着信があったが、また叩き起こされたので無視して寝た。ちなみにその日はそれ以降親父から着信はなかった。

    その翌日。また朝の9時半、10時に親父の携帯から着信があったが、無視した。用事があったんで、起きてはいたんだが。その日もそれ以降親父から着信はなかった。

    その翌日。また朝の9時半に親父から着信があったが無視した。友達と昼に待ち合わせだったので、そのまま出かけると、電車の中で親父から入ったショートメールを見た。

    曰く、

    こちから呼びつけておいてひどいことを言いました。反省しています。すいませんでした。」

    「宛先印刷ソフトを入れて頂いてありがとうございました」(ほぼ原文)

    その日の夜に「メッセージは見た。これ以上は罵る言葉しか出てこないので返信しない」とだけ返しておいたら、翌日に「わかりました。落ち着いたら連絡をください。」と返ってきた。

    あれから1週間以上になるんだが、未だに親父を許す気になれん。親父もお袋も70歳までカウントダウンだし、寛容になってみるべきなんだろうか。

    しろ、死に目にあえなくてもいいかな、くらいにも考えてる。色々積もり積もったものがあるからね。

    吐き出しですまん。

    2019-01-07

    携帯ショップ中の人だけど、疲れた

    この業界を好きで続けてる人って、どれくらい居るんだろう。

    通信業界の人で、今はショップスタッフ

    あなた説明は今までで一番分かりやすい」

    あなたのおかげで無駄契約が全部省けた!」

    ショップ店員ってお高くとまってて、何でも契約押し付けられるイメージしかなかったけどそんなこと無かった、親切に教えてくれた」

    「○○の店員はみんな冷たいけどここはそんなこと無かった」

    他店や他代理店のエゲツないやり口を知ってるからさりげなく追加新規とかしつつでも本当に必要無い人には押し付けない、でリピーター口コミから指名してくれる人も店の業績も伸びた。

    これは素直に嬉しい。

    でもそれ以上に、

    データが消えるなんて聞いてない!」←初期化データ消えることやで…初期化して良いってあなたが言って、あなたリセットボタン押したじゃない…

    「昔はやってくれたのに、何でデータ移してくれんの!?」←今と昔じゃ違うし、そもそももうどこのショップもやってない。やってたらそれは大問題

    「毎月物凄い料金払っとんのに、何も無いんか!」←それ、代理店派遣で来てる私に言われてもってのが本音だけど、各キャリア、長期ユーザーには何かしらの補填が有ります

    料金はセンターに丸投げすれば、最悪どうにかなるけど、データは無理。スマホ逆さまにしたって戻りません。

    iPhoneからAndroid機種変したら、ライントーク履歴は消えます。逆も然り。これ、毎回先に言っても理解してくれない人がいる。

    壊れた端末からデータを引っこ抜くことは一般ショップじゃ出来ません、お金払ってそういうのやってるとこで相談して下さい。

    SIMロック解除した端末に新しくSIM刺してプロファイル入れ替えたら、元キャリアメールは消えます。敢えて説明しません。バックアップ取ってるものとして進めるから

    ガラケーに刺してたSDスマホに入れるとデータ壊れる可能性大です。過去に何件も忠告無視して消えた人見てます、素直に新しいSDにしとけば良かったのに。

    iTunesを過信しないでください。でもアップルコールセンターは皆さん優しいし全力で支援して下さるので助かってます

    データは、そんなに大事ならいろんなところにバックアップ取っといてください。

    スマホって、電話じゃないよ、小さいパソコンと思って。

    androidPC直結してフォルダごとコピーSDiCloudiTunesPCに、googleフォト、googleドライブ、やり方は沢山あります

    泣いて怒ってデータが戻るならいくらでも泣いて怒ってくれて良いけど、無駄です。

    「そんなの聞いてなかった!」と言われても、スマホへ保存してるデータは各個人違います

    全部面倒見切れません。

    最近、受付件数が増えると同時にこういう案件が多くて、もうぐんにょりです。

    これを読んだ増田さん、もしショップ機種変更するなら、必ずバックアップ取っておいてください。

    わたしはもう疲れました。

    この春商戦を前に離職しそうな程に心が折れてます

    2019-01-03

    anond:20190103184241

    // WindowsProject7.cpp: アプリケーションエントリ ポイント定義します。
    //
    
    #include "stdafx.h"
    #include "WindowsProject7.h"
    
    #define MAX_LOADSTRING 100
    
    // グローバル変数:
    HINSTANCE hInst;                                // 現在インターフェイス
    WCHAR szTitle[MAX_LOADSTRING];                  // タイトル バーテキスト
    WCHAR szWindowClass[MAX_LOADSTRING];            // メイン ウィンドウ クラス名
    
    // このコード モジュールに含まれ関数宣言転送します:
    //ATOM                MyRegisterClass(HINSTANCE hInstance);
    BOOL                InitInstance(HINSTANCE, int);
    LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
    INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);
    
    #include <list>
    
    class MyWindow;
    	
    std::list< MyWindow *> windows;
    
    class MyWindow
    {
    public:
    
    	HWND hWnd;
    
    
    
    	MyWindow()
    		:hWnd(NULL)
    	{
    		windows.push_back(this);
    	}
    
    	virtual ~MyWindow()
    	{
    		std::list< MyWindow *>::iterator it;
    		for (it = windows.begin(); it != windows.end(); it++)
    		{
    			if (*it == this)
    			{
    				windows.erase(it);
    				break;
    			}
    		}
    	}
    
    	static MyWindow * find(HWND key)
    	{
    		std::list< MyWindow *>::iterator it;
    		for (it = windows.begin(); it != windows.end(); it++)
    		{
    			MyWindow *target = *it;
    
    			if (target->hWnd == key)
    			{
    				return target;
    			}
    
    		}
    
    		return NULL;
    	}
    
    
    
    	//
    	//  関数: MyRegisterClass()
    	//
    	//  目的: ウィンドウ クラス登録します。
    	//
    	ATOM MyRegisterClass(HINSTANCE hInstance)
    	{
    		WNDCLASSEXW wcex;
    
    		wcex.cbSize = sizeof(WNDCLASSEX);
    
    		wcex.style = CS_HREDRAW | CS_VREDRAW;
    		wcex.lpfnWndProc = WndProc;
    		wcex.cbClsExtra = 0;
    		wcex.cbWndExtra = 0;
    		wcex.hInstance = hInstance;
    		wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WINDOWSPROJECT7));
    		wcex.hCursor = LoadCursor(nullptr, IDC_ARROW);
    		wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
    		wcex.lpszMenuName = MAKEINTRESOURCEW(IDC_WINDOWSPROJECT7);
    		wcex.lpszClassName = szWindowClass;
    		wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
    
    		return RegisterClassExW(&wcex);
    	}
    
    	//
    	//   関数: InitInstance(HINSTANCE, int)
    	//
    	//   目的: インスタンス ハンドルを保存して、メイン ウィンドウ作成します。
    	//
    	//   コメント:
    	//
    	//        この関数で、グローバル変数インスタンス ハンドルを保存し、
    	//        メイン プログラム ウィンドウ作成および表示します。
    	//
    
    	int blocks[100][100];
    
    	BOOL InitInstance()
    	{
    		hInst = hInstance; // グローバル変数インスタンス処理を格納します。
    
    		ATOM c = MyRegisterClass(hInstance);
    		x = 0;
    		y = 0;
    		boxType = 0;
    
    		hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
    			CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);
    
    		for(int x = 0 ; x < 100 ; x++)
    		{
    			for (int y = 0; y < 100; y++)
    			{
    				blocks[y][x] = 0;
    			}
    		}
    
    		if (!hWnd)
    		{
    			return FALSE;
    		}
    
    		return TRUE;
    	}
    
    	BOOL ShowWindow()
    	{
    		BOOL ret;
    		ret = ::ShowWindow(hWnd, SW_SHOW);
    		::UpdateWindow(hWnd);
    
    		return ret;
    	}
    
    
    	HINSTANCE hInstance;
    	MSG msg;
    	BOOL run;
    	int x;
    	int y;
    	BOOL Main()
    	{
    
    		HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WINDOWSPROJECT7));
    		run = true;
    		int rc;
    		// メイン メッセージ ループ:
    		while (run)
    		{
    			DWORD obj = MsgWaitForMultipleObjectsEx(0, NULL,  100 , QS_PAINT| QS_ALLEVENTS,0);
    			if (obj <= WAIT_OBJECT_0)
    			{
    				while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
    				{
    					if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
    					{
    						TranslateMessage(&msg);
    						DispatchMessage(&msg);
    					}
    					if (msg.message == WM_QUIT) {
    						run = FALSE;
    					}
    					if (msg.message == WM_CLOSE) {
    						run = FALSE;
    					}
    
    				}
    			}
    			else if (obj == WAIT_TIMEOUT)
    			{
    				y++;
    				PAINTSTRUCT ps;
    				HDC hdc = BeginPaint(hWnd, &ps);
    				this->OnPaint(ps);
    				EndPaint(hWnd, &ps);
    				::UpdateWindow(hWnd);
    				RECT Rect2 = { 0,0,48*9,48 * 100 };
    				InvalidateRect(hWnd, &Rect2, TRUE);
    			}
    			else if (obj == WAIT_FAILED)
    			{
    				rc = GetLastError();
    			}
    			else {
    
    			}
    		}
    
    
    		return TRUE;
    
    	}
    
    	int boxType;
    
    	BOOL WriteBoxOLDBox()
    	{
    		int width = 24;
    
    		HDC hdc = GetDC(hWnd);
    		HBRUSH hBrush = CreateSolidBrush(RGB(48, 48, 48));
    		for (int y = 0; y < 30; y++)
    		{
    			for (int x = 0; x < 8; x++)
    			{
    				if (blocks[y][x] == 0)
    				{
    					continue;
    				}
    
    				RECT Rect = { 0,0,48,48 };
    				BOOL ret;
    
    				Rect.left = width * x + 1;
    				Rect.right = width * (x + 1) - 1;
    				Rect.top = width * y + 1;
    				Rect.bottom = width * (y + 1) - 1;
    
    				ret = FillRect(hdc, &Rect, hBrush);
    
    
    			}
    		}
    
    		DeleteObject(hBrush);
    
    		return FALSE;
    	}
    
    
    	BOOL WriteBox()
    	{
    		WriteBoxOLDBox();
    
    		switch (boxType)
    		{
    		case 0:
    			return WriteBoxI();
    		case 1:
    			return WriteBoxL();
    		case 2:
    			return WriteBoxZ();
    
    		}
    
    		return TRUE;
    	}
    
    	BOOL WriteBoxZ()
    	{
    		HDC hdc = GetDC(hWnd);
    		HBRUSH hBrush = CreateSolidBrush(RGB(48, 48, 246));
    
    		int width = 24;
    
    		RECT Rect = { 0,0,48,48 };
    		BOOL ret;
    
    		Rect.left = width * x + 1;
    		Rect.right = width * (x + 1) - 1;
    		Rect.top = width * y + 1;
    		Rect.bottom = width * (y + 1) - 1;
    
    		ret = FillRect(hdc, &Rect, hBrush);
    
    
    		Rect.top += width;
    		Rect.bottom += width;
    		ret = FillRect(hdc, &Rect, hBrush);
    
    		Rect.left += width;
    		Rect.right += width;
    		ret = FillRect(hdc, &Rect, hBrush);
    
    		Rect.top += width;
    		Rect.bottom += width;
    		ret = FillRect(hdc, &Rect, hBrush);
    
    
    		DeleteObject(hBrush);
    
    		return TRUE;
    	}
    
    
    	BOOL WriteBoxL()
    	{
    		HDC hdc = GetDC(hWnd);
    		HBRUSH hBrush = CreateSolidBrush(RGB(48, 246 , 48));
    
    		int width = 24;
    
    		RECT Rect = { 0,0,48,48 };
    		BOOL ret;
    
    		Rect.left = width * x + 1;
    		Rect.right = width * (x + 1) -1 ;
    		Rect.top = width * y + 1;
    		Rect.bottom = width * (y + 1) -1;
    
    		ret = FillRect(hdc, &Rect, hBrush);
    
    
    		Rect.top    += width; 
    		Rect.bottom += width;
    		ret = FillRect(hdc, &Rect, hBrush);
    
    		Rect.top += width;
    		Rect.bottom += width;
    		ret = FillRect(hdc, &Rect, hBrush);
    
    		Rect.left   += width;
    		Rect.right  += width;
    		ret = FillRect(hdc, &Rect, hBrush);
    
    		DeleteObject(hBrush);
    
    		return TRUE;
    	}
    
    	BOOL WriteBoxI()
    	{
    		HDC hdc = GetDC(hWnd);
    		HBRUSH hBrush = CreateSolidBrush(RGB( 246 , 48 , 48));
    
    		int width = 24;
    
    		RECT Rect = { 0,0,48,48 };
    		BOOL ret;
    
    		Rect.left = width * x + 1;
    		Rect.right = width * (x + 1) - 1;
    		Rect.top = width * y + 1;
    		Rect.bottom = width * (y + 1) - 1;
    
    		ret = FillRect(hdc, &Rect, hBrush);
    
    
    		//Rect.left   += width;
    		//Rect.right  += width;
    		Rect.top += width;
    		Rect.bottom += width;
    		ret = FillRect(hdc, &Rect, hBrush);
    
    		Rect.top += width;
    		Rect.bottom += width;
    		ret = FillRect(hdc, &Rect, hBrush);
    
    		Rect.top += width;
    		Rect.bottom += width;
    		ret = FillRect(hdc, &Rect, hBrush);
    
    		DeleteObject(hBrush);
    
    		return TRUE;
    	}
    
    	BOOL SaveBoxI()
    	{
    		blocks[y  ][x] = 1;
    		blocks[y+1][x] = 1;
    		blocks[y+2][x] = 1;
    		blocks[y+3][x] = 1;
    		return TRUE;
    	}
    
    
    	BOOL OnPaint(PAINTSTRUCT &ps)
    	{
    		if (x > 8) {
    			x = 0;
    		}
    		if (x <0) {
    			x = 8;
    		}
    		if (y > 20) {
    			switch (boxType)
    			{
    			case 0:
    				SaveBoxI();
    				break;
    			case 1:
    				break;
    			case 2:
    				break;
    			}
    
    			y = 0;
    			boxType++;
    			if (boxType > 2)
    			{
    				boxType = 0;
    			}
    		}
    
    		this->WriteBox();
    
    		return TRUE;
    	}
    
    
    
    	BOOL OnKey(WPARAM wParam)
    	{
    		if (wParam == VK_LEFT)
    		{
    			x++;
    		}
    		if (wParam == VK_RIGHT)
    		{
    			x--;
    		}
    		return TRUE;
    	}
    
    
    };
    
    
    int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
                         _In_opt_ HINSTANCE hPrevInstance,
                         _In_ LPWSTR    lpCmdLine,
                         _In_ int       nCmdShow)
    {
        UNREFERENCED_PARAMETER(hPrevInstance);
        UNREFERENCED_PARAMETER(lpCmdLine);
    
        // TODO: ここにコードを挿入してください。
    
        // グローバル文字列初期化しています。
        LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
        LoadStringW(hInstance, IDC_WINDOWSPROJECT7, szWindowClass, MAX_LOADSTRING);
        //MyRegisterClass(hInstance);
    
    
    
    	MyWindow win;
    
    
    
    	win.hInstance = hInstance;
    
    	// アプリケーション初期化を実行します:
    	if (!win.InitInstance())
    	{
    		return FALSE;
    	}
    
    	BOOL ret;
    
    	win.ShowWindow();
    
    	ret = win.Main();
    
    	if (ret)
    	{
    		return 0;
    	}else {
    		return (int)win.msg.wParam;
    	}
    
    
    
    }
    
    
    
    
    
    
    //
    //  関数: WndProc(HWND, UINT, WPARAM, LPARAM)
    //
    //  目的:    メイン ウィンドウメッセージを処理します。
    //
    //  WM_COMMAND  - アプリケーション メニューの処理
    //  WM_PAINT    - メイン ウィンドウの描画
    //  WM_DESTROY  - 中止メッセージを表示して戻る
    //
    //
    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        switch (message)
        {
        case WM_COMMAND:
            {
                int wmId = LOWORD(wParam);
                // 選択されたメニューの解析:
                switch (wmId)
                {
                case IDM_ABOUT:
                    DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
                    break;
                case IDM_EXIT:
                    DestroyWindow(hWnd);
                    break;
                default:
                    return DefWindowProc(hWnd, message, wParam, lParam);
                }
            }
    		break;
    	case WM_KEYDOWN:
    		{
    			MyWindow *target = MyWindow::find(hWnd);
    			target->OnKey(wParam);
    		}
    	break;
        case WM_PAINT:
            {
                PAINTSTRUCT ps;
                HDC hdc = BeginPaint(hWnd, &ps);
    
    			MyWindow *target = MyWindow::find(hWnd);
    			target->OnPaint(ps);
    
    
                // TODO: HDC を使用する描画コードをここに追加してください...
                EndPaint(hWnd, &ps);
            }
            break;
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
        }
        return 0;
    }
    
    // バージョン情報ボックスメッセージ ハンドラーです。
    INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
    {
        UNREFERENCED_PARAMETER(lParam);
        switch (message)
        {
        case WM_INITDIALOG:
            return (INT_PTR)TRUE;
    
        case WM_COMMAND:
            if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
            {
                EndDialog(hDlg, LOWORD(wParam));
                return (INT_PTR)TRUE;
            }
            break;
        }
        return (INT_PTR)FALSE;
    }
    
    

    anond:20190103170543

    テトリス

    落ちてくるブロックの描き方

    わかりやす関数化してみた

    まずはブロックの種類は3種類

     

    WriteBoxLとWriteBoxIとWriteBoxZ

    の違いをよく見比べて

    自力で違いがわかれば

    プログラマーにはなれるとおもう

    とはいえ、コレを自力でわかるならもっと儲かる仕事あるとはおもうけどな

     

    	BOOL WriteBox()
    	{
    		switch (boxType)
    		{
    		case 0:
    			return WriteBoxI();
    		case 1:
    			return WriteBoxL();
    		case 2:
    			return WriteBoxZ();
    
    		}
    	}
    
    // WindowsProject7.cpp: アプリケーションエントリ ポイント定義します。
    //
    
    #include "stdafx.h"
    #include "WindowsProject7.h"
    
    #define MAX_LOADSTRING 100
    
    // グローバル変数:
    HINSTANCE hInst;                                // 現在インターフェイス
    WCHAR szTitle[MAX_LOADSTRING];                  // タイトル バーテキスト
    WCHAR szWindowClass[MAX_LOADSTRING];            // メイン ウィンドウ クラス名
    
    // このコード モジュールに含まれ関数宣言転送します:
    //ATOM                MyRegisterClass(HINSTANCE hInstance);
    BOOL                InitInstance(HINSTANCE, int);
    LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
    INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);
    
    #include <list>
    
    class MyWindow;
    	
    std::list< MyWindow *> windows;
    
    class MyWindow
    {
    public:
    
    	HWND hWnd;
    
    
    
    	MyWindow()
    		:hWnd(NULL)
    	{
    		windows.push_back(this);
    	}
    
    	virtual ~MyWindow()
    	{
    		std::list< MyWindow *>::iterator it;
    		for (it = windows.begin(); it != windows.end(); it++)
    		{
    			if (*it == this)
    			{
    				windows.erase(it);
    				break;
    			}
    		}
    	}
    
    	static MyWindow * find(HWND key)
    	{
    		std::list< MyWindow *>::iterator it;
    		for (it = windows.begin(); it != windows.end(); it++)
    		{
    			MyWindow *target = *it;
    
    			if (target->hWnd == key)
    			{
    				return target;
    			}
    
    		}
    
    		return NULL;
    	}
    
    
    
    	//
    	//  関数: MyRegisterClass()
    	//
    	//  目的: ウィンドウ クラス登録します。
    	//
    	ATOM MyRegisterClass(HINSTANCE hInstance)
    	{
    		WNDCLASSEXW wcex;
    
    		wcex.cbSize = sizeof(WNDCLASSEX);
    
    		wcex.style = CS_HREDRAW | CS_VREDRAW;
    		wcex.lpfnWndProc = WndProc;
    		wcex.cbClsExtra = 0;
    		wcex.cbWndExtra = 0;
    		wcex.hInstance = hInstance;
    		wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WINDOWSPROJECT7));
    		wcex.hCursor = LoadCursor(nullptr, IDC_ARROW);
    		wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
    		wcex.lpszMenuName = MAKEINTRESOURCEW(IDC_WINDOWSPROJECT7);
    		wcex.lpszClassName = szWindowClass;
    		wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
    
    		return RegisterClassExW(&wcex);
    	}
    
    	//
    	//   関数: InitInstance(HINSTANCE, int)
    	//
    	//   目的: インスタンス ハンドルを保存して、メイン ウィンドウ作成します。
    	//
    	//   コメント:
    	//
    	//        この関数で、グローバル変数インスタンス ハンドルを保存し、
    	//        メイン プログラム ウィンドウ作成および表示します。
    	//
    	BOOL InitInstance()
    	{
    		hInst = hInstance; // グローバル変数インスタンス処理を格納します。
    
    		ATOM c = MyRegisterClass(hInstance);
    		x = 0;
    		y = 0;
    		boxType = 0;
    
    		hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
    			CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);
    
    		if (!hWnd)
    		{
    			return FALSE;
    		}
    
    		return TRUE;
    	}
    
    	BOOL ShowWindow()
    	{
    		BOOL ret;
    		ret = ::ShowWindow(hWnd, SW_SHOW);
    		::UpdateWindow(hWnd);
    
    		return ret;
    	}
    
    
    	HINSTANCE hInstance;
    	MSG msg;
    	BOOL run;
    	int x;
    	int y;
    	BOOL Main()
    	{
    
    		HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WINDOWSPROJECT7));
    		run = true;
    		int rc;
    		// メイン メッセージ ループ:
    		while (run)
    		{
    			DWORD obj = MsgWaitForMultipleObjectsEx(0, NULL,  100 , QS_PAINT| QS_ALLEVENTS,0);
    			if (obj <= WAIT_OBJECT_0)
    			{
    				while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
    				{
    					if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
    					{
    						TranslateMessage(&msg);
    						DispatchMessage(&msg);
    					}
    					if (msg.message == WM_QUIT) {
    						run = FALSE;
    					}
    					if (msg.message == WM_CLOSE) {
    						run = FALSE;
    					}
    
    				}
    			}
    			else if (obj == WAIT_TIMEOUT)
    			{
    				y++;
    				PAINTSTRUCT ps;
    				HDC hdc = BeginPaint(hWnd, &ps);
    				this->OnPaint(ps);
    				EndPaint(hWnd, &ps);
    				::UpdateWindow(hWnd);
    				RECT Rect2 = { 0,0,48*9,48 * 8 };
    				InvalidateRect(hWnd, &Rect2, TRUE);
    			}
    			else if (obj == WAIT_FAILED)
    			{
    				rc = GetLastError();
    			}
    			else {
    
    			}
    		}
    
    
    		return TRUE;
    
    	}
    
    	int boxType;
    
    	BOOL WriteBox()
    	{
    		switch (boxType)
    		{
    		case 0:
    			return WriteBoxI();
    		case 1:
    			return WriteBoxL();
    		case 2:
    			return WriteBoxZ();
    
    		}
    	}
    
    	BOOL WriteBoxZ()
    	{
    		HDC hdc = GetDC(hWnd);
    		HBRUSH hBrush = CreateSolidBrush(RGB(48, 48, 246));
    
    		int width = 24;
    
    		RECT Rect = { 0,0,48,48 };
    		BOOL ret;
    
    		Rect.left = width * x + 1;
    		Rect.right = width * (x + 1) - 1;
    		Rect.top = width * y + 1;
    		Rect.bottom = width * (y + 1) - 1;
    
    		ret = FillRect(hdc, &Rect, hBrush);
    
    
    		Rect.top += width;
    		Rect.bottom += width;
    		ret = FillRect(hdc, &Rect, hBrush);
    
    		Rect.left += width;
    		Rect.right += width;
    		ret = FillRect(hdc, &Rect, hBrush);
    
    		Rect.top += width;
    		Rect.bottom += width;
    		ret = FillRect(hdc, &Rect, hBrush);
    
    
    		DeleteObject(hBrush);
    
    		return TRUE;
    	}
    
    
    	BOOL WriteBoxL()
    	{
    		HDC hdc = GetDC(hWnd);
    		HBRUSH hBrush = CreateSolidBrush(RGB(48, 48, 246));
    
    		int width = 24;
    
    		RECT Rect = { 0,0,48,48 };
    		BOOL ret;
    
    		Rect.left = width * x + 1;
    		Rect.right = width * (x + 1) -1 ;
    		Rect.top = width * y + 1;
    		Rect.bottom = width * (y + 1) -1;
    
    		ret = FillRect(hdc, &Rect, hBrush);
    
    
    		Rect.top    += width; 
    		Rect.bottom += width;
    		ret = FillRect(hdc, &Rect, hBrush);
    
    		Rect.top += width;
    		Rect.bottom += width;
    		ret = FillRect(hdc, &Rect, hBrush);
    
    		Rect.left   += width;
    		Rect.right  += width;
    		ret = FillRect(hdc, &Rect, hBrush);
    
    		DeleteObject(hBrush);
    
    		return TRUE;
    	}
    
    	BOOL WriteBoxI()
    	{
    		HDC hdc = GetDC(hWnd);
    		HBRUSH hBrush = CreateSolidBrush(RGB(48, 48, 246));
    
    		int width = 24;
    
    		RECT Rect = { 0,0,48,48 };
    		BOOL ret;
    
    		Rect.left = width * x + 1;
    		Rect.right = width * (x + 1) - 1;
    		Rect.top = width * y + 1;
    		Rect.bottom = width * (y + 1) - 1;
    
    		ret = FillRect(hdc, &Rect, hBrush);
    
    
    		//Rect.left   += width;
    		//Rect.right  += width;
    		Rect.top += width;
    		Rect.bottom += width;
    		ret = FillRect(hdc, &Rect, hBrush);
    
    		Rect.top += width;
    		Rect.bottom += width;
    		ret = FillRect(hdc, &Rect, hBrush);
    
    		Rect.top += width;
    		Rect.bottom += width;
    		ret = FillRect(hdc, &Rect, hBrush);
    
    		DeleteObject(hBrush);
    
    		return TRUE;
    	}
    
    
    	BOOL OnPaint(PAINTSTRUCT &ps)
    	{
    		if (x > 8) {
    			x = 0;
    		}
    		if (x <0) {
    			x = 8;
    		}
    		if (y > 8) {
    			y = 0;
    			boxType++;
    			if (boxType > 2)
    			{
    				boxType = 0;
    			}
    		}
    
    		this->WriteBox();
    
    		return TRUE;
    	}
    
    
    
    	BOOL OnKey()
    	{
    		x++;
    		return TRUE;
    	}
    
    
    };
    
    
    int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
                         _In_opt_ HINSTANCE hPrevInstance,
                         _In_ LPWSTR    lpCmdLine,
                         _In_ int       nCmdShow)
    {
        UNREFERENCED_PARAMETER(hPrevInstance);
        UNREFERENCED_PARAMETER(lpCmdLine);
    
        // TODO: ここにコードを挿入してください。
    
        // グローバル文字列初期化しています。
        LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
        LoadStringW(hInstance, IDC_WINDOWSPROJECT7, szWindowClass, MAX_LOADSTRING);
        //MyRegisterClass(hInstance);
    
    
    
    	MyWindow win;
    
    
    
    	win.hInstance = hInstance;
    
    	// アプリケーション初期化を実行します:
    	if (!win.InitInstance())
    	{
    		return FALSE;
    	}
    
    	BOOL ret;
    
    	win.ShowWindow();
    
    	ret = win.Main();
    
    	if (ret)
    	{
    		return 0;
    	}else {
    		return (int)win.msg.wParam;
    	}
    
    
    
    }
    
    
    
    
    
    
    //
    //  関数: WndProc(HWND, UINT, WPARAM, LPARAM)
    //
    //  目的:    メイン ウィンドウメッセージを処理します。
    //
    //  WM_COMMAND  - アプリケーション メニューの処理
    //  WM_PAINT    - メイン ウィンドウの描画
    //  WM_DESTROY  - 中止メッセージを表示して戻る
    //
    //
    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        switch (message)
        {
        case WM_COMMAND:
            {
                int wmId = LOWORD(wParam);
                // 選択されたメニューの解析:
                switch (wmId)
                {
                case IDM_ABOUT:
                    DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
                    break;
                case IDM_EXIT:
                    DestroyWindow(hWnd);
                    break;
                default:
                    return DefWindowProc(hWnd, message, wParam, lParam);
                }
            }
    		break;
    	case WM_KEYDOWN:
    		{
    			MyWindow *target = MyWindow::find(hWnd);
    			target->OnKey();
    		}
    	break;
        case WM_PAINT:
            {
                PAINTSTRUCT ps;
                HDC hdc = BeginPaint(hWnd, &ps);
    
    			MyWindow *target = MyWindow::find(hWnd);
    			target->OnPaint(ps);
    
    
                // TODO: HDC を使用する描画コードをここに追加してください...
                EndPaint(hWnd, &ps);
            }
            break;
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
        }
        return 0;
    }
    
    // バージョン情報ボックスメッセージ ハンドラーです。
    INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
    {
        UNREFERENCED_PARAMETER(lParam);
        switch (message)
        {
        case WM_INITDIALOG:
            return (INT_PTR)TRUE;
    
        case WM_COMMAND:
            if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
            {
                EndDialog(hDlg, LOWORD(wParam));
                return (INT_PTR)TRUE;
            }
            break;
        }
        return (INT_PTR)FALSE;
    }
    
    

    anond:20190101175055

    テトリス風?プログラムに向けて

    第何回だろうな

    キー入力を追加した

    まだ、何を押してもブロックが右に移動するだけ(右端にいくと左にワープ

    タイマー自動落下

     

    でもまぁ ここまでサンプルがあるとほぼテトリスは見えてきた

    // WindowsProject7.cpp: アプリケーションエントリ ポイント定義します。
    //
    
    #include "stdafx.h"
    #include "WindowsProject7.h"
    
    #define MAX_LOADSTRING 100
    
    // グローバル変数:
    HINSTANCE hInst;                                // 現在インターフェイス
    WCHAR szTitle[MAX_LOADSTRING];                  // タイトル バーテキスト
    WCHAR szWindowClass[MAX_LOADSTRING];            // メイン ウィンドウ クラス名
    
    // このコード モジュールに含まれ関数宣言転送します:
    //ATOM                MyRegisterClass(HINSTANCE hInstance);
    BOOL                InitInstance(HINSTANCE, int);
    LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
    INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);
    
    #include <list>
    
    class MyWindow;
    	
    std::list< MyWindow *> windows;
    
    class MyWindow
    {
    public:
    
    	HWND hWnd;
    
    
    
    	MyWindow()
    		:hWnd(NULL)
    	{
    		windows.push_back(this);
    	}
    
    	virtual ~MyWindow()
    	{
    		std::list< MyWindow *>::iterator it;
    		for (it = windows.begin(); it != windows.end(); it++)
    		{
    			if (*it == this)
    			{
    				windows.erase(it);
    				break;
    			}
    		}
    	}
    
    	static MyWindow * find(HWND key)
    	{
    		std::list< MyWindow *>::iterator it;
    		for (it = windows.begin(); it != windows.end(); it++)
    		{
    			MyWindow *target = *it;
    
    			if (target->hWnd == key)
    			{
    				return target;
    			}
    
    		}
    
    		return NULL;
    	}
    
    
    
    	//
    	//  関数: MyRegisterClass()
    	//
    	//  目的: ウィンドウ クラス登録します。
    	//
    	ATOM MyRegisterClass(HINSTANCE hInstance)
    	{
    		WNDCLASSEXW wcex;
    
    		wcex.cbSize = sizeof(WNDCLASSEX);
    
    		wcex.style = CS_HREDRAW | CS_VREDRAW;
    		wcex.lpfnWndProc = WndProc;
    		wcex.cbClsExtra = 0;
    		wcex.cbWndExtra = 0;
    		wcex.hInstance = hInstance;
    		wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WINDOWSPROJECT7));
    		wcex.hCursor = LoadCursor(nullptr, IDC_ARROW);
    		wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
    		wcex.lpszMenuName = MAKEINTRESOURCEW(IDC_WINDOWSPROJECT7);
    		wcex.lpszClassName = szWindowClass;
    		wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
    
    		return RegisterClassExW(&wcex);
    	}
    
    	//
    	//   関数: InitInstance(HINSTANCE, int)
    	//
    	//   目的: インスタンス ハンドルを保存して、メイン ウィンドウ作成します。
    	//
    	//   コメント:
    	//
    	//        この関数で、グローバル変数インスタンス ハンドルを保存し、
    	//        メイン プログラム ウィンドウ作成および表示します。
    	//
    	BOOL InitInstance()
    	{
    		hInst = hInstance; // グローバル変数インスタンス処理を格納します。
    
    		ATOM c = MyRegisterClass(hInstance);
    		x = 0;
    		y = 0;
    
    		hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
    			CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);
    
    		if (!hWnd)
    		{
    			return FALSE;
    		}
    
    		return TRUE;
    	}
    
    	BOOL ShowWindow()
    	{
    		BOOL ret;
    		ret = ::ShowWindow(hWnd, SW_SHOW);
    		::UpdateWindow(hWnd);
    
    		return ret;
    	}
    
    
    	HINSTANCE hInstance;
    	MSG msg;
    	BOOL run;
    	int x;
    	int y;
    	BOOL Main()
    	{
    
    		HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WINDOWSPROJECT7));
    		run = true;
    		int rc;
    		// メイン メッセージ ループ:
    		while (run)
    		{
    			DWORD obj = MsgWaitForMultipleObjectsEx(0, NULL,  100 , QS_PAINT| QS_ALLEVENTS,0);
    			if (obj <= WAIT_OBJECT_0)
    			{
    				while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
    				{
    					if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
    					{
    						TranslateMessage(&msg);
    						DispatchMessage(&msg);
    					}
    					if (msg.message == WM_QUIT) {
    						run = FALSE;
    					}
    					if (msg.message == WM_CLOSE) {
    						run = FALSE;
    					}
    
    				}
    			}
    			else if (obj == WAIT_TIMEOUT)
    			{
    				y++;
    				PAINTSTRUCT ps;
    				HDC hdc = BeginPaint(hWnd, &ps);
    				this->OnPaint(ps);
    				EndPaint(hWnd, &ps);
    				::UpdateWindow(hWnd);
    				RECT Rect2 = { 0,0,48*9,48 * 8 };
    				InvalidateRect(hWnd, &Rect2, TRUE);
    			}
    			else if (obj == WAIT_FAILED)
    			{
    				rc = GetLastError();
    			}
    			else {
    
    			}
    		}
    
    
    		return TRUE;
    
    	}
    
    	BOOL OnPaint(PAINTSTRUCT &ps)
    	{
    		HDC hdc = GetDC(hWnd);
    		HBRUSH hBrush = CreateSolidBrush(RGB(48, 48, 246));
    		RECT Rect = { 0,0,48,48 };
    		Rect.left = 48 * x;
    		Rect.right = 48 * (x+1);
    		Rect.top = 48 * y;
    		Rect.bottom = 48 * (y+1);
    		if (x > 8) {
    			x = 0;
    		}
    		if (x <0) {
    			x = 8;
    		}
    		if (y > 8) {
    			y = 0;
    		}
    		BOOL ret = FillRect(ps.hdc, &Rect, hBrush);
    		DeleteObject(hBrush);
    
    		return TRUE;
    	}
    
    	BOOL OnKey()
    	{
    		x++;
    		return TRUE;
    	}
    
    
    };
    
    
    int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
                         _In_opt_ HINSTANCE hPrevInstance,
                         _In_ LPWSTR    lpCmdLine,
                         _In_ int       nCmdShow)
    {
        UNREFERENCED_PARAMETER(hPrevInstance);
        UNREFERENCED_PARAMETER(lpCmdLine);
    
        // TODO: ここにコードを挿入してください。
    
        // グローバル文字列初期化しています。
        LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
        LoadStringW(hInstance, IDC_WINDOWSPROJECT7, szWindowClass, MAX_LOADSTRING);
        //MyRegisterClass(hInstance);
    
    
    
    	MyWindow win;
    
    
    
    	win.hInstance = hInstance;
    
    	// アプリケーション初期化を実行します:
    	if (!win.InitInstance())
    	{
    		return FALSE;
    	}
    
    	BOOL ret;
    
    	win.ShowWindow();
    
    	ret = win.Main();
    
    	if (ret)
    	{
    		return 0;
    	}else {
    		return (int)win.msg.wParam;
    	}
    
    
    
    }
    
    
    
    
    
    
    //
    //  関数: WndProc(HWND, UINT, WPARAM, LPARAM)
    //
    //  目的:    メイン ウィンドウメッセージを処理します。
    //
    //  WM_COMMAND  - アプリケーション メニューの処理
    //  WM_PAINT    - メイン ウィンドウの描画
    //  WM_DESTROY  - 中止メッセージを表示して戻る
    //
    //
    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        switch (message)
        {
        case WM_COMMAND:
            {
                int wmId = LOWORD(wParam);
                // 選択されたメニューの解析:
                switch (wmId)
                {
                case IDM_ABOUT:
                    DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
                    break;
                case IDM_EXIT:
                    DestroyWindow(hWnd);
                    break;
                default:
                    return DefWindowProc(hWnd, message, wParam, lParam);
                }
            }
    		break;
    	case WM_KEYDOWN:
    		{
    			MyWindow *target = MyWindow::find(hWnd);
    			target->OnKey();
    		}
    	break;
        case WM_PAINT:
            {
                PAINTSTRUCT ps;
                HDC hdc = BeginPaint(hWnd, &ps);
    
    			MyWindow *target = MyWindow::find(hWnd);
    			target->OnPaint(ps);
    
    
                // TODO: HDC を使用する描画コードをここに追加してください...
                EndPaint(hWnd, &ps);
            }
            break;
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
        }
        return 0;
    }
    
    // バージョン情報ボックスメッセージ ハンドラーです。
    INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
    {
        UNREFERENCED_PARAMETER(lParam);
        switch (message)
        {
        case WM_INITDIALOG:
            return (INT_PTR)TRUE;
    
        case WM_COMMAND:
            if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
            {
                EndDialog(hDlg, LOWORD(wParam));
                return (INT_PTR)TRUE;
            }
            break;
        }
        return (INT_PTR)FALSE;
    }
    
    

    2019-01-01

    anond:20190101172100

    タイマーを使ったアニメーションを付けた

    // WindowsProject7.cpp: アプリケーションエントリ ポイント定義します。
    //
    
    #include "stdafx.h"
    #include "WindowsProject7.h"
    
    #define MAX_LOADSTRING 100
    
    // グローバル変数:
    HINSTANCE hInst;                                // 現在インターフェイス
    WCHAR szTitle[MAX_LOADSTRING];                  // タイトル バーテキスト
    WCHAR szWindowClass[MAX_LOADSTRING];            // メイン ウィンドウ クラス名
    
    // このコード モジュールに含まれ関数宣言転送します:
    //ATOM                MyRegisterClass(HINSTANCE hInstance);
    BOOL                InitInstance(HINSTANCE, int);
    LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
    INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);
    
    #include <list>
    
    class MyWindow;
    	
    std::list< MyWindow *> windows;
    
    class MyWindow
    {
    public:
    
    	HWND hWnd;
    
    
    
    	MyWindow()
    		:hWnd(NULL)
    	{
    		windows.push_back(this);
    	}
    
    	virtual ~MyWindow()
    	{
    		std::list< MyWindow *>::iterator it;
    		for (it = windows.begin(); it != windows.end(); it++)
    		{
    			if (*it == this)
    			{
    				windows.erase(it);
    				break;
    			}
    		}
    	}
    
    	static MyWindow * find(HWND key)
    	{
    		std::list< MyWindow *>::iterator it;
    		for (it = windows.begin(); it != windows.end(); it++)
    		{
    			MyWindow *target = *it;
    
    			if (target->hWnd == key)
    			{
    				return target;
    			}
    
    		}
    
    		return NULL;
    	}
    
    
    
    	//
    	//  関数: MyRegisterClass()
    	//
    	//  目的: ウィンドウ クラス登録します。
    	//
    	ATOM MyRegisterClass(HINSTANCE hInstance)
    	{
    		WNDCLASSEXW wcex;
    
    		wcex.cbSize = sizeof(WNDCLASSEX);
    
    		wcex.style = CS_HREDRAW | CS_VREDRAW;
    		wcex.lpfnWndProc = WndProc;
    		wcex.cbClsExtra = 0;
    		wcex.cbWndExtra = 0;
    		wcex.hInstance = hInstance;
    		wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WINDOWSPROJECT7));
    		wcex.hCursor = LoadCursor(nullptr, IDC_ARROW);
    		wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
    		wcex.lpszMenuName = MAKEINTRESOURCEW(IDC_WINDOWSPROJECT7);
    		wcex.lpszClassName = szWindowClass;
    		wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
    
    		return RegisterClassExW(&wcex);
    	}
    
    	//
    	//   関数: InitInstance(HINSTANCE, int)
    	//
    	//   目的: インスタンス ハンドルを保存して、メイン ウィンドウ作成します。
    	//
    	//   コメント:
    	//
    	//        この関数で、グローバル変数インスタンス ハンドルを保存し、
    	//        メイン プログラム ウィンドウ作成および表示します。
    	//
    	BOOL InitInstance()
    	{
    		hInst = hInstance; // グローバル変数インスタンス処理を格納します。
    
    		ATOM c = MyRegisterClass(hInstance);
    		y = 0;
    
    		hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
    			CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);
    
    		if (!hWnd)
    		{
    			return FALSE;
    		}
    
    		return TRUE;
    	}
    
    	BOOL ShowWindow()
    	{
    		BOOL ret;
    		ret = ::ShowWindow(hWnd, SW_SHOW);
    		::UpdateWindow(hWnd);
    
    		return ret;
    	}
    
    
    	HINSTANCE hInstance;
    	MSG msg;
    	BOOL run;
    	int y;
    	BOOL Main()
    	{
    
    		HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WINDOWSPROJECT7));
    		run = true;
    		int rc;
    		// メイン メッセージ ループ:
    		while (run)
    		{
    			DWORD obj = MsgWaitForMultipleObjectsEx(0, NULL,  100 , QS_PAINT| QS_ALLEVENTS,0);
    			if (obj <= WAIT_OBJECT_0)
    			{
    				while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
    				{
    					if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
    					{
    						TranslateMessage(&msg);
    						DispatchMessage(&msg);
    					}
    					if (msg.message == WM_QUIT) {
    						run = FALSE;
    					}
    					if (msg.message == WM_CLOSE) {
    						run = FALSE;
    					}
    
    				}
    			}
    			else if (obj == WAIT_TIMEOUT)
    			{
    				y++;
    				PAINTSTRUCT ps;
    				HDC hdc = BeginPaint(hWnd, &ps);
    				this->OnPaint(ps);
    				EndPaint(hWnd, &ps);
    				::UpdateWindow(hWnd);
    				RECT Rect2 = { 0,0,48,48 * 8 };
    				InvalidateRect(hWnd, &Rect2, TRUE);
    			}
    			else if (obj == WAIT_FAILED)
    			{
    				rc = GetLastError();
    			}
    			else {
    
    			}
    		}
    
    
    		return TRUE;
    
    	}
    
    	BOOL OnPaint(PAINTSTRUCT &ps)
    	{
    		HDC hdc = GetDC(hWnd);
    		HBRUSH hBrush = CreateSolidBrush(RGB(48, 48, 246));
    		RECT Rect = { 0,0,48,48 };
    		Rect.top = 48 * y;
    		Rect.bottom = 48 * (y+1);
    		if (y > 8) {
    			y = 0;
    		}
    		BOOL ret = FillRect(ps.hdc, &Rect, hBrush);
    		DeleteObject(hBrush);
    
    		return TRUE;
    	}
    
    
    };
    
    
    int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
                         _In_opt_ HINSTANCE hPrevInstance,
                         _In_ LPWSTR    lpCmdLine,
                         _In_ int       nCmdShow)
    {
        UNREFERENCED_PARAMETER(hPrevInstance);
        UNREFERENCED_PARAMETER(lpCmdLine);
    
        // TODO: ここにコードを挿入してください。
    
        // グローバル文字列初期化しています。
        LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
        LoadStringW(hInstance, IDC_WINDOWSPROJECT7, szWindowClass, MAX_LOADSTRING);
        //MyRegisterClass(hInstance);
    
    
    
    	MyWindow win;
    
    
    
    	win.hInstance = hInstance;
    
    	// アプリケーション初期化を実行します:
    	if (!win.InitInstance())
    	{
    		return FALSE;
    	}
    
    	BOOL ret;
    
    	win.ShowWindow();
    
    	ret = win.Main();
    
    	if (ret)
    	{
    		return 0;
    	}else {
    		return (int)win.msg.wParam;
    	}
    
    
    
    }
    
    
    
    
    
    
    //
    //  関数: WndProc(HWND, UINT, WPARAM, LPARAM)
    //
    //  目的:    メイン ウィンドウメッセージを処理します。
    //
    //  WM_COMMAND  - アプリケーション メニューの処理
    //  WM_PAINT    - メイン ウィンドウの描画
    //  WM_DESTROY  - 中止メッセージを表示して戻る
    //
    //
    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        switch (message)
        {
        case WM_COMMAND:
            {
                int wmId = LOWORD(wParam);
                // 選択されたメニューの解析:
                switch (wmId)
                {
                case IDM_ABOUT:
                    DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
                    break;
                case IDM_EXIT:
                    DestroyWindow(hWnd);
                    break;
                default:
                    return DefWindowProc(hWnd, message, wParam, lParam);
                }
            }
            break;
        case WM_PAINT:
            {
                PAINTSTRUCT ps;
                HDC hdc = BeginPaint(hWnd, &ps);
    
    			MyWindow *target = MyWindow::find(hWnd);
    			target->OnPaint(ps);
    
    
                // TODO: HDC を使用する描画コードをここに追加してください...
                EndPaint(hWnd, &ps);
            }
            break;
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
        }
        return 0;
    }
    
    // バージョン情報ボックスメッセージ ハンドラーです。
    INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
    {
        UNREFERENCED_PARAMETER(lParam);
        switch (message)
        {
        case WM_INITDIALOG:
            return (INT_PTR)TRUE;
    
        case WM_COMMAND:
            if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
            {
                EndDialog(hDlg, LOWORD(wParam));
                return (INT_PTR)TRUE;
            }
            break;
        }
        return (INT_PTR)FALSE;
    }
    
    

    anond:20190101162210

    やすいように フルソー

    青い■を表示するだけ

    // WindowsProject7.cpp: アプリケーションエントリ ポイント定義します。
    //
    
    #include "stdafx.h"
    #include "WindowsProject7.h"
    
    #define MAX_LOADSTRING 100
    
    // グローバル変数:
    HINSTANCE hInst;                                // 現在インターフェイス
    WCHAR szTitle[MAX_LOADSTRING];                  // タイトル バーテキスト
    WCHAR szWindowClass[MAX_LOADSTRING];            // メイン ウィンドウ クラス名
    
    // このコード モジュールに含まれ関数宣言転送します:
    //ATOM                MyRegisterClass(HINSTANCE hInstance);
    BOOL                InitInstance(HINSTANCE, int);
    LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
    INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);
    
    #include <list>
    
    class MyWindow;
    	
    std::list< MyWindow *> windows;
    
    class MyWindow
    {
    public:
    
    	HWND hWnd;
    
    
    
    	MyWindow()
    		:hWnd(NULL)
    	{
    		windows.push_back(this);
    	}
    
    	virtual ~MyWindow()
    	{
    		std::list< MyWindow *>::iterator it;
    		for (it = windows.begin(); it != windows.end(); it++)
    		{
    			if (*it == this)
    			{
    				windows.erase(it);
    				break;
    			}
    		}
    	}
    
    	static MyWindow * find(HWND key)
    	{
    		std::list< MyWindow *>::iterator it;
    		for (it = windows.begin(); it != windows.end(); it++)
    		{
    			MyWindow *target = *it;
    
    			if (target->hWnd == key)
    			{
    				return target;
    			}
    
    		}
    
    		return NULL;
    	}
    
    
    
    	//
    	//  関数: MyRegisterClass()
    	//
    	//  目的: ウィンドウ クラス登録します。
    	//
    	ATOM MyRegisterClass(HINSTANCE hInstance)
    	{
    		WNDCLASSEXW wcex;
    
    		wcex.cbSize = sizeof(WNDCLASSEX);
    
    		wcex.style = CS_HREDRAW | CS_VREDRAW;
    		wcex.lpfnWndProc = WndProc;
    		wcex.cbClsExtra = 0;
    		wcex.cbWndExtra = 0;
    		wcex.hInstance = hInstance;
    		wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WINDOWSPROJECT7));
    		wcex.hCursor = LoadCursor(nullptr, IDC_ARROW);
    		wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
    		wcex.lpszMenuName = MAKEINTRESOURCEW(IDC_WINDOWSPROJECT7);
    		wcex.lpszClassName = szWindowClass;
    		wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
    
    		return RegisterClassExW(&wcex);
    	}
    
    	//
    	//   関数: InitInstance(HINSTANCE, int)
    	//
    	//   目的: インスタンス ハンドルを保存して、メイン ウィンドウ作成します。
    	//
    	//   コメント:
    	//
    	//        この関数で、グローバル変数インスタンス ハンドルを保存し、
    	//        メイン プログラム ウィンドウ作成および表示します。
    	//
    	BOOL InitInstance()
    	{
    		hInst = hInstance; // グローバル変数インスタンス処理を格納します。
    
    		ATOM c = MyRegisterClass(hInstance);
    
    
    		hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
    			CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);
    
    		if (!hWnd)
    		{
    			return FALSE;
    		}
    
    		return TRUE;
    	}
    
    	BOOL ShowWindow()
    	{
    		BOOL ret;
    		ret = ::ShowWindow(hWnd, SW_SHOW);
    		::UpdateWindow(hWnd);
    
    		return ret;
    	}
    
    
    	HINSTANCE hInstance;
    	MSG msg;
    
    	BOOL Main()
    	{
    
    		HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WINDOWSPROJECT7));
    
    		// メイン メッセージ ループ:
    		while (GetMessage(&msg, nullptr, 0, 0))
    		{
    			if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
    			{
    				TranslateMessage(&msg);
    				DispatchMessage(&msg);
    			}
    		}
    
    
    		return TRUE;
    
    	}
    
    	BOOL OnPaint(PAINTSTRUCT &ps)
    	{
    		HBRUSH hBrush = CreateSolidBrush(RGB(48, 48, 246));
    		RECT Rect = { 0,0,48,48 };
    		BOOL ret = FillRect(ps.hdc, &Rect, hBrush);
    		DeleteObject(hBrush);
    
    		return TRUE;
    	}
    
    
    };
    
    
    int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
                         _In_opt_ HINSTANCE hPrevInstance,
                         _In_ LPWSTR    lpCmdLine,
                         _In_ int       nCmdShow)
    {
        UNREFERENCED_PARAMETER(hPrevInstance);
        UNREFERENCED_PARAMETER(lpCmdLine);
    
        // TODO: ここにコードを挿入してください。
    
        // グローバル文字列初期化しています。
        LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
        LoadStringW(hInstance, IDC_WINDOWSPROJECT7, szWindowClass, MAX_LOADSTRING);
        //MyRegisterClass(hInstance);
    
    
    
    	MyWindow win;
    
    
    
    	win.hInstance = hInstance;
    
    	// アプリケーション初期化を実行します:
    	if (!win.InitInstance())
    	{
    		return FALSE;
    	}
    
    	BOOL ret;
    
    	win.ShowWindow();
    
    	ret = win.Main();
    
    	if (ret)
    	{
    		return 0;
    	}else {
    		return (int)win.msg.wParam;
    	}
    
    
    
    }
    
    
    
    
    
    
    //
    //  関数: WndProc(HWND, UINT, WPARAM, LPARAM)
    //
    //  目的:    メイン ウィンドウメッセージを処理します。
    //
    //  WM_COMMAND  - アプリケーション メニューの処理
    //  WM_PAINT    - メイン ウィンドウの描画
    //  WM_DESTROY  - 中止メッセージを表示して戻る
    //
    //
    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        switch (message)
        {
        case WM_COMMAND:
            {
                int wmId = LOWORD(wParam);
                // 選択されたメニューの解析:
                switch (wmId)
                {
                case IDM_ABOUT:
                    DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
                    break;
                case IDM_EXIT:
                    DestroyWindow(hWnd);
                    break;
                default:
                    return DefWindowProc(hWnd, message, wParam, lParam);
                }
            }
            break;
        case WM_PAINT:
            {
                PAINTSTRUCT ps;
                HDC hdc = BeginPaint(hWnd, &ps);
    
    			MyWindow *target = MyWindow::find(hWnd);
    			target->OnPaint(ps);
    
    
                // TODO: HDC を使用する描画コードをここに追加してください...
                EndPaint(hWnd, &ps);
            }
            break;
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
        }
        return 0;
    }
    
    // バージョン情報ボックスメッセージ ハンドラーです。
    INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
    {
        UNREFERENCED_PARAMETER(lParam);
        switch (message)
        {
        case WM_INITDIALOG:
            return (INT_PTR)TRUE;
    
        case WM_COMMAND:
            if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
            {
                EndDialog(hDlg, LOWORD(wParam));
                return (INT_PTR)TRUE;
            }
            break;
        }
        return (INT_PTR)FALSE;
    }
    
    

    anond:20181231104029

    // WindowsProject7.cpp: アプリケーションエントリ ポイント定義します。
    //
    
    #include "stdafx.h"
    #include "WindowsProject7.h"
    
    #define MAX_LOADSTRING 100
    
    // グローバル変数:
    HINSTANCE hInst;                                // 現在インターフェイス
    WCHAR szTitle[MAX_LOADSTRING];                  // タイトル バーテキスト
    WCHAR szWindowClass[MAX_LOADSTRING];            // メイン ウィンドウ クラス名
    
    // このコード モジュールに含まれ関数宣言転送します:
    //ATOM                MyRegisterClass(HINSTANCE hInstance);
    BOOL                InitInstance(HINSTANCE, int);
    LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
    INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);
    
    #include <list>
    
    class MyWindow;
    	
    std::list< MyWindow *> windows;
    
    class MyWindow
    {
    public:
    
    	HWND hWnd;
    
    
    
    	MyWindow()
    		:hWnd(NULL)
    	{
    		windows.push_back(this);
    	}
    
    	virtual ~MyWindow()
    	{
    		std::list< MyWindow *>::iterator it;
    		for (it = windows.begin(); it != windows.end(); it++)
    		{
    			if (*it == this)
    			{
    				windows.erase(it);
    				break;
    			}
    		}
    	}
    
    	static MyWindow * find(HWND key)
    	{
    		std::list< MyWindow *>::iterator it;
    		for (it = windows.begin(); it != windows.end(); it++)
    		{
    			MyWindow *target = *it;
    
    			if (target->hWnd == key)
    			{
    				return target;
    			}
    
    		}
    
    		return NULL;
    	}
    
    
    
    	//
    	//  関数: MyRegisterClass()
    	//
    	//  目的: ウィンドウ クラス登録します。
    	//
    	ATOM MyRegisterClass(HINSTANCE hInstance)
    	{
    		WNDCLASSEXW wcex;
    
    		wcex.cbSize = sizeof(WNDCLASSEX);
    
    		wcex.style = CS_HREDRAW | CS_VREDRAW;
    		wcex.lpfnWndProc = WndProc;
    		wcex.cbClsExtra = 0;
    		wcex.cbWndExtra = 0;
    		wcex.hInstance = hInstance;
    		wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WINDOWSPROJECT7));
    		wcex.hCursor = LoadCursor(nullptr, IDC_ARROW);
    		wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
    		wcex.lpszMenuName = MAKEINTRESOURCEW(IDC_WINDOWSPROJECT7);
    		wcex.lpszClassName = szWindowClass;
    		wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
    
    		return RegisterClassExW(&wcex);
    	}
    
    	//
    	//   関数: InitInstance(HINSTANCE, int)
    	//
    	//   目的: インスタンス ハンドルを保存して、メイン ウィンドウ作成します。
    	//
    	//   コメント:
    	//
    	//        この関数で、グローバル変数インスタンス ハンドルを保存し、
    	//        メイン プログラム ウィンドウ作成および表示します。
    	//
    	BOOL InitInstance()
    	{
    		hInst = hInstance; // グローバル変数インスタンス処理を格納します。
    
    		ATOM c = MyRegisterClass(hInstance);
    
    
    		hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
    			CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);
    
    		if (!hWnd)
    		{
    			return FALSE;
    		}
    
    		return TRUE;
    	}
    
    	BOOL ShowWindow()
    	{
    		BOOL ret;
    		ret = ::ShowWindow(hWnd, SW_SHOW);
    		::UpdateWindow(hWnd);
    
    		return ret;
    	}
    
    
    	HINSTANCE hInstance;
    	MSG msg;
    
    	BOOL Main()
    	{
    
    		HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WINDOWSPROJECT7));
    
    		// メイン メッセージ ループ:
    		while (GetMessage(&msg, nullptr, 0, 0))
    		{
    			if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
    			{
    				TranslateMessage(&msg);
    				DispatchMessage(&msg);
    			}
    		}
    
    
    		return TRUE;
    
    	}
    
    	BOOL OnPaint()
    	{
    		return TRUE;
    	}
    
    
    };
    
    
    int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
                         _In_opt_ HINSTANCE hPrevInstance,
                         _In_ LPWSTR    lpCmdLine,
                         _In_ int       nCmdShow)
    {
        UNREFERENCED_PARAMETER(hPrevInstance);
        UNREFERENCED_PARAMETER(lpCmdLine);
    
        // TODO: ここにコードを挿入してください。
    
        // グローバル文字列初期化しています。
        LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
        LoadStringW(hInstance, IDC_WINDOWSPROJECT7, szWindowClass, MAX_LOADSTRING);
        //MyRegisterClass(hInstance);
    
    
    
    	MyWindow win;
    
    
    
    	win.hInstance = hInstance;
    
    	// アプリケーション初期化を実行します:
    	if (!win.InitInstance())
    	{
    		return FALSE;
    	}
    
    	BOOL ret;
    
    	win.ShowWindow();
    
    	ret = win.Main();
    
    	if (ret)
    	{
    		return 0;
    	}else {
    		return (int)win.msg.wParam;
    	}
    
    
    
    }
    
    
    
    
    
    
    //
    //  関数: WndProc(HWND, UINT, WPARAM, LPARAM)
    //
    //  目的:    メイン ウィンドウメッセージを処理します。
    //
    //  WM_COMMAND  - アプリケーション メニューの処理
    //  WM_PAINT    - メイン ウィンドウの描画
    //  WM_DESTROY  - 中止メッセージを表示して戻る
    //
    //
    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        switch (message)
        {
        case WM_COMMAND:
            {
                int wmId = LOWORD(wParam);
                // 選択されたメニューの解析:
                switch (wmId)
                {
                case IDM_ABOUT:
                    DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
                    break;
                case IDM_EXIT:
                    DestroyWindow(hWnd);
                    break;
                default:
                    return DefWindowProc(hWnd, message, wParam, lParam);
                }
            }
            break;
        case WM_PAINT:
            {
                PAINTSTRUCT ps;
                HDC hdc = BeginPaint(hWnd, &ps);
    
    			MyWindow *target = MyWindow::find(hWnd);
    			target->OnPaint();
    
    
                // TODO: HDC を使用する描画コードをここに追加してください...
                EndPaint(hWnd, &ps);
            }
            break;
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
        }
        return 0;
    }
    
    // バージョン情報ボックスメッセージ ハンドラーです。
    INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
    {
        UNREFERENCED_PARAMETER(lParam);
        switch (message)
        {
        case WM_INITDIALOG:
            return (INT_PTR)TRUE;
    
        case WM_COMMAND:
            if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
            {
                EndDialog(hDlg, LOWORD(wParam));
                return (INT_PTR)TRUE;
            }
            break;
        }
        return (INT_PTR)FALSE;
    }
    
    

    Windowsシステムは基本 グローバル関数なので

    グローバル関数<>クラス化されたメソッド

    ブリッジ関数を書いた

    2018-12-31

    anond:20181228211250

    // WindowsProject7.cpp: アプリケーションエントリ ポイント定義します。
    //
    
    #include "stdafx.h"
    #include "WindowsProject7.h"
    
    #define MAX_LOADSTRING 100
    
    // グローバル変数:
    HINSTANCE hInst;                                // 現在インターフェイス
    WCHAR szTitle[MAX_LOADSTRING];                  // タイトル バーテキスト
    WCHAR szWindowClass[MAX_LOADSTRING];            // メイン ウィンドウ クラス名
    
    // このコード モジュールに含まれ関数宣言転送します:
    //ATOM                MyRegisterClass(HINSTANCE hInstance);
    BOOL                InitInstance(HINSTANCE, int);
    LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
    INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);
    
    
    class MyWindow
    {
    public:
    
    	HWND hWnd;
    
    	MyWindow()
    		:hWnd(NULL)
    	{
    
    	}
    
    
    	//
    	//  関数: MyRegisterClass()
    	//
    	//  目的: ウィンドウ クラス登録します。
    	//
    	ATOM MyRegisterClass(HINSTANCE hInstance)
    	{
    		WNDCLASSEXW wcex;
    
    		wcex.cbSize = sizeof(WNDCLASSEX);
    
    		wcex.style = CS_HREDRAW | CS_VREDRAW;
    		wcex.lpfnWndProc = WndProc;
    		wcex.cbClsExtra = 0;
    		wcex.cbWndExtra = 0;
    		wcex.hInstance = hInstance;
    		wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WINDOWSPROJECT7));
    		wcex.hCursor = LoadCursor(nullptr, IDC_ARROW);
    		wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
    		wcex.lpszMenuName = MAKEINTRESOURCEW(IDC_WINDOWSPROJECT7);
    		wcex.lpszClassName = szWindowClass;
    		wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
    
    		return RegisterClassExW(&wcex);
    	}
    
    	//
    	//   関数: InitInstance(HINSTANCE, int)
    	//
    	//   目的: インスタンス ハンドルを保存して、メイン ウィンドウ作成します。
    	//
    	//   コメント:
    	//
    	//        この関数で、グローバル変数インスタンス ハンドルを保存し、
    	//        メイン プログラム ウィンドウ作成および表示します。
    	//
    	BOOL InitInstance()
    	{
    		hInst = hInstance; // グローバル変数インスタンス処理を格納します。
    
    		ATOM c = MyRegisterClass(hInstance);
    
    
    		hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
    			CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);
    
    		if (!hWnd)
    		{
    			return FALSE;
    		}
    
    		return TRUE;
    	}
    
    	BOOL ShowWindow()
    	{
    		BOOL ret;
    		ret = ::ShowWindow(hWnd, SW_SHOW);
    		::UpdateWindow(hWnd);
    
    		return ret;
    	}
    
    
    	HINSTANCE hInstance;
    	MSG msg;
    
    	BOOL Main()
    	{
    
    		HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WINDOWSPROJECT7));
    
    		// メイン メッセージ ループ:
    		while (GetMessage(&msg, nullptr, 0, 0))
    		{
    			if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
    			{
    				TranslateMessage(&msg);
    				DispatchMessage(&msg);
    			}
    		}
    
    
    		return TRUE;
    
    	}
    
    
    
    };
    
    
    int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
                         _In_opt_ HINSTANCE hPrevInstance,
                         _In_ LPWSTR    lpCmdLine,
                         _In_ int       nCmdShow)
    {
        UNREFERENCED_PARAMETER(hPrevInstance);
        UNREFERENCED_PARAMETER(lpCmdLine);
    
        // TODO: ここにコードを挿入してください。
    
        // グローバル文字列初期化しています。
        LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
        LoadStringW(hInstance, IDC_WINDOWSPROJECT7, szWindowClass, MAX_LOADSTRING);
        //MyRegisterClass(hInstance);
    
    
    
    	MyWindow win;
    
    
    
    	win.hInstance = hInstance;
    
    	// アプリケーション初期化を実行します:
    	if (!win.InitInstance())
    	{
    		return FALSE;
    	}
    
    	BOOL ret;
    
    	win.ShowWindow();
    
    	ret = win.Main();
    
    	if (ret)
    	{
    		return 0;
    	}else {
    		return (int)win.msg.wParam;
    	}
    
    
    
    }
    
    
    
    
    
    
    //
    //  関数: WndProc(HWND, UINT, WPARAM, LPARAM)
    //
    //  目的:    メイン ウィンドウメッセージを処理します。
    //
    //  WM_COMMAND  - アプリケーション メニューの処理
    //  WM_PAINT    - メイン ウィンドウの描画
    //  WM_DESTROY  - 中止メッセージを表示して戻る
    //
    //
    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        switch (message)
        {
        case WM_COMMAND:
            {
                int wmId = LOWORD(wParam);
                // 選択されたメニューの解析:
                switch (wmId)
                {
                case IDM_ABOUT:
                    DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
                    break;
                case IDM_EXIT:
                    DestroyWindow(hWnd);
                    break;
                default:
                    return DefWindowProc(hWnd, message, wParam, lParam);
                }
            }
            break;
        case WM_PAINT:
            {
                PAINTSTRUCT ps;
                HDC hdc = BeginPaint(hWnd, &ps);
                // TODO: HDC を使用する描画コードをここに追加してください...
                EndPaint(hWnd, &ps);
            }
            break;
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
        }
        return 0;
    }
    
    // バージョン情報ボックスメッセージ ハンドラーです。
    INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
    {
        UNREFERENCED_PARAMETER(lParam);
        switch (message)
        {
        case WM_INITDIALOG:
            return (INT_PTR)TRUE;
    
        case WM_COMMAND:
            if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
            {
                EndDialog(hDlg, LOWORD(wParam));
                return (INT_PTR)TRUE;
            }
            break;
        }
        return (INT_PTR)FALSE;
    }
    
    

    こんなかんじ。クラス化した

    2018-12-07

    Wi-Fi無料提供してた奴、身内にいた問題

    https://anond.hatelabo.jp/20181206214612

    世の中にいる、家庭のIT管理者になってしまってるものです。

    からWi-Fiが遅いって話がきて、ルータの置き換えしに行ってきたんですよ。

    実家Wi-Fiルータ10年前のものだし、縦に長い家だから電波も設置場所から離れれば遅くなるし、そら新しいiPhoneを持っても実感は4G回線より遅いですね。

    ルータ設置して、これで終わりと思った矢先。

    Wi-Fiチャンネル一覧見たら鍵なしのルータがある。

    試しにつなぐとつながる。

    いやいや、こんなタダ乗りされたらまずい時代アカンやろwww

    とか笑ってました。

    気づく1時間前まで。

    かのぼること実家でる数年前。

    実家電波の飛びが悪いことを知ってた私は、自分の部屋にも中継器おいてたことを思い出しました。

    もしやと思い、弟の部屋へ。

    ええ、ありましたよ。

    鍵なしSSIDと同じ文字列が書いてあるルータが。

    焦って、初期化して設定変更。

    当の本人に聞いたら

    ・今年はじめ買ったやつ

    ・(鍵なしについて)そんなのさわった覚えない

    ・やり方わからいからつながるしほったらかしてた。

    ・そんなこといわれたってわからない

    リテラシーなさすぎとかいう、次元こえてました。

    緊急策として、こっちで管理できる内容にして、わからないならもう設定をいじらないことを伝えました。

    リスクの話はまた別の日にゆっくり話そうと思います

    世のおうちIT管理人になってるみなさま、意外なところに落とし穴存在しています

    家電説明書読まなくても使えるようにメーカーはして、リテラシーなき人も使えるようになってきています

    でも使い方はわかっても、イレギュラー動作説明書みないといけないのに見ないし、リスクの話は説明書にすら乗ってない。

    簡単に危ないですよってしか書いてなくて、何が危ないかすらわかってない。

    ほんと次から身内ですら金もらうレベルですよ、これ。

    電器屋サポートシステム、理にかなってますわ。



    話題脱線しました。

    とにかく、身内にフリーWi-Fiがいたら即つぶしましょう。

    自分危険に晒される前に危険の芽を積みましょう。

    2018-12-06

    仕事ミスした、、、

    今の職場では9月に未経験から入社して3か月とちょっと経った。

    今日必要データ初期化してしまった。死にたい

    幸い昨日のバックアップデータがあったようで今先輩社員がこっそり直してくれているけど、もう息をするのがつらい。

    2018-11-19

    anond:20181119135516

    AppleIDが分からいか初期化、なら初期化すべきはiPhoneじゃなくてAppleIDのパスワードだろ。

    iPhoneウンコな所

    初期化する際にAppleIDへのログイン強制される

    それがわかんないか初期化するっつってんだろが黒タートルネック

    2018-11-18

    anond:20181117114626

    技術屋のオッサンなので、カスタマイズ性とやらに惹かれて最初に持ったスマホは安いアンドロイドだった

    が、この端末が最悪で、しょっちゅうシャットダウンしては初期化され、写真を撮る時はモバイルバッテリー接続しないと落ちる

    なんかやべーなと思っているうちに旅行前に起動しなくなった

    ふざけんな、と思いながら携帯ショップ

    同機種の新品端末を修理交換という形で勧められたが断り速攻でiPhone機種変更したわ

    こんなひどい例は滅多にないとは思うがandroid品質の差が激しい

    スマホエントリー機で割とハードな使い方した自分もあれなのかもしれんが

    もうスマホiPhoneでいいわ

    携帯端末で面倒があるのが一番困る

    2018-11-09

    モニタの設定が初期化されてしまうようになって仕方なく適当に設定してる

    なんか増田の色のトーン変わったように見えるのはモニタ所為かね こんなに色変わるとこまるんだけど

    アーカイブ ヘルプ
    ログイン ユーザー登録
    ようこそ ゲスト さん