「BEGIN」を含む日記 RSS

はてなキーワード: BEGINとは

2021-01-08

トランプ大統領の「敗北宣言」全文書き起こしと増田

I’d like to begin by addressing the heinous attack on the United States Capitol. Like all Americans I am outraged by the violence, lawlessness and mayhem.

まず初めに、合衆国議事堂へのあの凶悪攻撃について述べたたいと思います。すべての国民の皆様と同様、私はあのような無法と騒乱に怒りを禁じえません、。


I immediately deployed the National Guard and federal law enforcement to secure the building and expel the intruders. America is and must always be a nation of law and order.

私はただちに州兵連邦法執行機関配備して議事堂安全を確保し、侵入者排除しました。アメリカは常に法と秩序の国であらねばなりません。


To demonstrators who infiltrated the Capitol: you have defiled the seat of American democracy. To those who engage in the acts of violence and destruction: you do not represent our country. And to those who broke the law: you will pay.

議事堂に潜り込んだデモ隊に言いたいことがありますあなたたちはアメリカ民主主義議席怪我した。

暴力破壊行為に走る者たちにもいいたい。あなたたちは我々の国の代表ではない。

法を破った人々にもいいたい。あなたたちはかならず報いを受ける。


We have just been through an intense election and emotions are high. But now, tempers must be cooled and calm restored. We must get on with the business of America.

我々は選挙戦を激しく争い、感情的にも高ぶってます。ですが今は、冷静になり、穏やかさを取り戻す必要があります。我々はやるべきことに取り組まねばなりません。


My campaign vigorously pursued every legal avenue to contest the election results, my only goal was to ensure the integrity of the vote. In so doing, I was fighting to defend American democracy.

私の選挙キャンペーン選挙戦の結果に異議を申し立てるためのあらゆる法的手段を徹底的に追求しました。私の唯一の目標投票における整合性を確かめることでした。私はアメリカ民主主義を守るために闘っていたのです。


I continue to strongly believe that we must reform our election laws to verify the identity and eligibility of all voters and to ensure faith and confidence in all future elections.

今後のあらゆる選挙における信頼と信用を確かなものとするためにも、すべての有権者の身元と資格確認するように私たち選挙法を改革しなければいけないと、私はこれからも強く信じ続けます


Now, Congress has certified the results. A new administration will be inaugurated on January 20. My focus now turns to ensuring a smooth, orderly and seamless transition of power. This moment calls for healing and reconciliation.

さて、議会選挙結果を確定させました。1月20日には新しい政権が発足するでしょう。私は今や、円滑で秩序ある、シームレス政権移行に注力することに気持ちを切り替えました。この瞬間にも癒やしと和解が求められています


2020 has been a challenging time for our people, a menacing pandemic has upended the lives of our citizens, isolated millions in their homes damaged our economy, and claimed countless lives.

2020年は我々にとって困難な年でした。おそろしいパンデミック市民生活を脅かし、数百万の人々を孤立させ、経済破壊し、数え切れないほどの命を奪いました。


Defeating this pandemic and rebuilding the greatest economy on earth will require all of us working together. It will require a renewed emphasis on the civic values of patriotism, faith, charity, community and family.

このパンデミックに打ち勝ち、世界で最も偉大な経済を再建するためには私たち全員が一致団結することが必要です。そこにおいてより重視すべきは、愛国心信仰慈善の心、コミュニティ、そして家族です。


We must revitalise the sacred bonds of love and loyalty, that bind us together as one national family. To the citizens of our country, serving as your president has been the honour of my lifetime.

私たちは愛と忠実さの神聖な絆を再び取り戻さねばなりません。その紐帯私たちひとつひとつナショナルファミリーとして結びつけます。市民の皆さん、あなたがたの大統領を務めさせてもらったことは、私の生涯の誇りです。


And to all of my wonderful supporters. I know you are disappointed, but I also want you to know that our incredible journey is only just beginning.

私のすばらしいサポーターのみなさん、あなたがたが失望しているしているのはわかっていますが、私たちの素晴らしい旅がまだまだ始まったばかりであることも知っておいてください。


Thank you, God bless you, and God bless America.

ありがとうございます。神の御加護を。そして、アメリカに神の御加護があらんことを。


--

フツーに読めば「シームレス政権移行をやる」っていってるんだから大統領選の結果を受け入れた=敗北宣言である

ところがヤフコメtwitter には「マスコミ英語がわからないのか、敗北したとも政権移行するとも言ってない」と吹き上がっている人がたくさんいる。

おそらく" I also want you to know that our incredible journey is only just beginning." の部分を拡大解釈しまくってるんだろう。ここも普通に読めば、支持者ビジネスで食っていくのでこれからよろしくね、というファン向けのメッセージなのだが。

2020-12-04

Awkに疲れる。

基礎からきちんと系統的に学ぶつもりもなくAwkやっているから疲れる。

1. BeginとかEndとかどうして必要なんだ?なくてもいけるようなきがする。

1. あと 「’」!!!お前は何者だ?スクリプトが始まるよってことか?

1. パイプ付でコマンドをいろいろ叩く必要あるけどこれもなんか現代的ぽくない

1. MS Office排除するって大変。。。。なんだかんだでエクセルも慣れ親しむと。。。

2020-11-03

anond:20201102113231

こうですか?わかりません ><

function pair(psns) {
  var i = -1;
  var cnt = 0;
  var flg = psns[0] && psns[0].sex;
  // modified on 2018-12-31 by XXXX
  // var flg psns[0].sex;
  var j = -1;
  var tmp = null;
  // modified on 2020-12-31 by XXXX.
  // var k = -1;
  for(i = 0; i < psns.length; i++) {
    //console.log('■■■■■■■■■■■■■■■■■■■■ BEGIN ■■■■■■■■■■■■■■■■■■■■')
    //console.log(psns, 'i=' + i, 'cnt=' + cnt, 'flg=' + flg);
    if(psns[i].sex == flg) {
      //console.log('cnt: ' + cnt + '->' + (cnt+1));
      cnt++;
    } else {
      j = i - cnt + 1;
      // j = i - cnt;
      // j = i - cnt - 1;
      //console.log('swap ' + i + '<-->' + j);
      tmp = psns[j];
      psns[j] = psns[i];
      psns[i] = tmp;
      i = j - 1; // <- 理由は分からないが、i = jだと上手くいかない(by XXXX)。
      cnt = 0;
      // flg = !flg; // これはなぜか上手くいかない (by XXXX)
      flg = flg == MALE ? FEMALE : MALE;
      while(j > 1) {
        if(psns[j].height < psns[j-2].height) {
          //console.log('swap ' + j + '<-->' + (j-2));
          tmp = psns[j-2];
          psns[j-2] = psns[j];
          psns[j] = tmp;
        }
        j -= 2;
      }
      // modified on 2018-12-31 by XXXX.
      // 
      //for(k = 0; k + 2 < j;) {
      //  if(psns[k].height > psns[k+2].height) {
      //    tmp = psns[k+2];
      //    psns[k+2] = psns[k];
      //    psns[k] = tmp;
      //  }
      //  k += 2;
      //}
    }
    //console.log(psns, 'i=' + i, 'cnt=' + cnt, 'flg=' + flg);
    //console.log('■■■■■■■■■■■■■■■■■■■■ END ■■■■■■■■■■■■■■■■■■■■')
    //console.log('')
  }
  for(i = 0; i < psns.length; i++) {
    //console.log('■■■■■■■■■■■■■■■■■■■■ BEGIN ■■■■■■■■■■■■■■■■■■■■')
    //j = i / 2;
    j = Math.floor(i / 2);
    //console.log(psns, 'i=' + i, 'j=' + j);
    tmp = psns[i];
    if(!(i % 2)) {
      psns[j] = [null, null];
    }
    if(tmp.sex == MALE) {
      psns[j][0] = tmp;
      psns[j][1] = psns[i+1];
    } else {
      psns[j][0] = psns[i+1];
      psns[j][1] = tmp;
    }
    // modified on 2018-12-31 by XXXX.
    // 
    //psns[j][0] = tmp;
    //psns[j][1] = psns[i+1];
    i++;
    //console.log(psns, 'i=' + i, 'j=' + j);
    //console.log('■■■■■■■■■■■■■■■■■■■■ END ■■■■■■■■■■■■■■■■■■■■')
  }
  psns.splice(psns.length / 2, psns.length);
  // modified on 2020-12-31 by XXXX.
  // return psns.slice(0, psns.length / 2 + 1);
  // return psns.slice(0, psns.length / 2);
}

2020-10-30

お願いだからセンスの無い人はプログラマにならないで下さい

プログラミングセンスです。センスの無い人がプログラマになると、他のすべての人に迷惑がかかります。だからセンスの無い人は絶対プログラマにならないで下さい。

プログラミングセンスが無い人や、プログラミングをやったことの無い人は、知識を得たり経験を積んだりすれば、誰でも「良いプログラマ」になれると思っているようですが、無理です。

というのも、センスの無いプログラマ問題は、知識経験の不足ではないからです。センスの無いプログラマの救いようの無い問題は「頭がおかしいこと」なのです。

題材は何でもいいのですが、具体的なコードを見た方がイメージがつきやすいと思いますので、とりあえず以下の問題を考えます

問題

住民リストが与えられるので、背の低い順に男女ペアにしたリストを作って下さい。ただし、男女の数は同数であるします。

コード

ふつうの人は、難しく考えずに以下のようなコードを書きます

const makePair = (persons) => {
  const males = persons.filter(person => person.sex === MALE)
  const females = persons.filter(person => person.sex === FEMALE)
  const compareHeight = (a, b) => a.height - b.height
  males.sort(compareHeight)
  females.sort(compareHeight)
  return males.map((male, idx) => [male, females[idx]]) // 男女の数は同数
}

この例はJavaScriptなので高階関数を使っていますが、仮にそういう機能が無かったとしても、

というコード構成は大きく変わらないでしょう。

一方、センスの無いゴミプログラマは、以下のような名状しがたきコードを書いてきます

function pair(psns) {
  var i = -1;
  var cnt = 0;
  var flg = psns[0] && psns[0].sex;
  var j = -1;
  var tmp = null;
  for(i = 0; i < psns.length; i++) {
    //console.log('■■■■■■■■■■■■■■■■■■■■ BEGIN ■■■■■■■■■■■■■■■■■■■■')
    //console.log(psns, 'i=' + i, 'cnt=' + cnt, 'flg=' + flg);
    if(psns[i].sex == flg) {
      //console.log('cnt: ' + cnt + '->' + (cnt+1));
      cnt++;
    } else {
      j = i - cnt + 1;
      //console.log('swap ' + i + '<-->' + j);
      tmp = psns[j];
      psns[j] = psns[i];
      psns[i] = tmp;
      i = j - 1; // <- 理由は分からないが、i = jだと上手くいかない(by XXXX)。
      cnt = 0;
      flg = flg == MALE ? FEMALE : MALE;
      while(j > 1) {
        if(psns[j].height < psns[j-2].height) {
          //console.log('swap ' + j + '<-->' + (j-2));
          tmp = psns[j-2];
          psns[j-2] = psns[j];
          psns[j] = tmp;
        }
        j -= 2;
      }
    }
    //console.log(psns, 'i=' + i, 'cnt=' + cnt, 'flg=' + flg);
    //console.log('■■■■■■■■■■■■■■■■■■■■ END ■■■■■■■■■■■■■■■■■■■■')
    //console.log('')
  }
  for(i = 0; i < psns.length; i++) {
    //console.log('■■■■■■■■■■■■■■■■■■■■ BEGIN ■■■■■■■■■■■■■■■■■■■■')
    j = Math.floor(i / 2);
    //console.log(psns, 'i=' + i, 'j=' + j);
    tmp = psns[i];
    if(!(i % 2)) {
      psns[j] = [null, null];
    }
    if(tmp.sex == MALE) {
      psns[j][0] = tmp;
      psns[j][1] = psns[i+1];
    } else {
      psns[j][0] = psns[i+1];
      psns[j][1] = tmp;
    }
    i++;
    //console.log(psns, 'i=' + i, 'j=' + j);
    //console.log('■■■■■■■■■■■■■■■■■■■■ END ■■■■■■■■■■■■■■■■■■■■')
  }
  psns.splice(psns.length / 2, psns.length);
}

こんなコードメンテナンスは御免被りたいです。一見して配列の要素を入れ替えていることが分かるだけで、実装を全て読まなければ(いや読んでも)処理の意図が全く分かりません。また、たとえば「i = j - 1」が間違って「i = j」などと書かれていてバグを起こしたとしても、原因を突き止めるのは困難を極めます

さて、このコードは具体的に何がいけないのでしょうか。長すぎることがいけないのしょうか。変数名が分かりにくいのがいけないのでしょうか。引数破壊的に変更しているのがいけないのでしょうか。不要コメントが残っているのがいけないのでしょうか。よく見ると、ソート処理で車輪の再発明をしていたり、「j」や「tmp」などが場所によって意味が違うカメレオン変数になっていたりしますが、それがいけないのでしょうか。どれも正しいですが、それらを逐一直したところで、本質的解決にはならないでしょう。

後者コードはもはや「ここを直したら良くなる」とかいレベルを超えています。たしかに、問題を具体的に挙げることはできます。このコードの致命的な問題が、凝集度の低さと、単一責任原則(SRP)違反にあるのは間違いありません。しかし、後者コードを書いてくる人に、

住民リストを男女に分ける処理や、リストソートをする処理、2つのリストをまとめる処理は、この問題とは独立して意味のある操作から、別の関数として抽出しましょう。その方がコードの見通しがよくなるし、一部の処理を修正したときの影響も小さくなるし、単体テストも書きやすくなります

なんて言ったって聞く耳を持たないでしょう。

そもそも、こういうコードを書く人は、この処理自体を「pair」なんて関数抽出すらしません。まだこの問題では入出力のフォーマットが明確に定義されているので、他人が1から書き直せますが、実際のプロダクトでは、無数の副作用を起こす数千行のコード迷路を彼の脳内フォーマットデータが通るわけです。もちろん、テストコードなんてありません。

まり、指摘をしても絶対に直らないのです。いくら言語の優れた機能ベストプラクティスを紹介しても、馬の耳に念仏。それらの利点を理解できるだけの脳みそが足りていないのです。

どうして、同じ処理を実装するのに、ここまでの違いが生じるのでしょうか。

これは、プログラミング技術問題ではありません。既に述べた通り、ふつうの人なら、特定機能の有無とか知識の程度にかかわらず、ふつうコードを書くのです。なぜなら、ふつうの人にはそちらの方が楽だからです。つまり、前者のコード別に何か卓越した技術を身につけた結果書けるようになるものではなく、まともな感覚さえ持っていれば、プログラミング初心者にとっても前者のコードの方が書きやすいのです。

まり後者のようなコードを書いてくる奴というのは、現実世界の捉え方が常人とは著しくずれているのです。要するに、「頭がおかしい」のです。この病気はもう直りません。だからセンスの無い人は絶対プログラマにはならないで下さい。

2020-10-02

anond:20201002140550

Tonight, @FLOTUS

and I tested positive for COVID-19. We will begin our quarantine and recovery process immediately. We will get through this TOGETHER!

だとさ

さすがに隠すわけにはいかなかったんだろう

2020-08-12

The Soka Gakkai is a cult group and an anti-American terrorist organization.

I would like to write about what I know and understand about the Soka Gakkai because the D.C. Times published an article titled "China's Manipulation of Japan, NPOs and Soka Gakkai Act as Pipeline = U.S. Think Tank Report".

China's Manipulation Against Japan, NPOs and Soka Gakkai Play Pipes = U.S. Think Tank Report (Epoch Times)
https://www.epochtimes.jp/p/2020/08/60384.html

First of all, as a premise, the Soka Gakkai is a cult.

This is because there is a definition of a religious cult, and the reality of the Soka Gakkai falls under that definition in many ways.

You can read more about the definition of a religious cult and mind control in the book "Combating Cult Mind Control: The #1 Best-selling Guide to Protection, Rescue, and Recovery from Destructive Cults ".

FCombating Cult Mind Control: The #1 Best-selling Guide to Protection, Rescue, and Recovery from Destructive Cults
https://www.amazon.com/Combating-Cult-Mind-Control-Best-selling/dp/0967068827

The Soka Gakkai is also a collection of criminals, sick people and poor people.

In fact, the Soka Gakkai is similar to the mafia gangs in Italy and Mexico, and it has reigned as the largest criminal and anti-society organization in Japan in the name of a religious organization.

Many of its members have been brainwashed and are unable to recognize and judge themselves as normal human beings.

In the 1950s and 1980s, Soka Gakkai members were forcibly recruited to join the Soka Gakkai, and nowadays, it is estimated that about 10% of the Japanese people are members of the Gakkai (Soka Gakkai members).

In particular, the Soka Gakkai has infiltrated civil servants, specifically the police force, the fire department, and the Self-Defense Forces, and it has been revealed that 20 to 30% of the Metropolitan Police Department's employees are members of the Soka Gakkai.

There is always a certain percentage of Soka Gakkai members in elementary, middle, and high school classes, and in corporate workplaces, and therefore it is taboo to criticize the Soka Gakkai in those communities.

This is because the Gakkai members in each community monitor the words and actions of their community members in the same way as the mainland communists who have infiltrated Hong Kong, and if someone speaks out against the Soka Gakkai, they will target that person and initiate a campaign of sabotage.

The sabotage is similar to the CPC's repressive actions against human rights activists in Hong Kong, including obstructing, harassing, and following them around, an act that has been described as mass stalking.

For example, in Japan, if you make a placating statement in a school class or at work that the Soka Gakkai is a cult religious group because it meets the definition of a cult group, members of the Gakkai in the community get madly angry (depending on the degree of mind control they are receiving) or bite off their anger to deny the statement.

Then they label the person who made such a statement as "anti", and they also share information about the antis with other members of the Soka Gakkai, and begin to perceive them as "beings to be punished by Buddha", to be targets of surveillance and group attacks.

In reality, however, the definition of a religious cult was not defined for the Soka Gakkai but for dangerous religious groups such as Aum Shinrikyo and People's Temple, which were intended to prevent ordinary people from being harmed by them.

The Soka Gakkai falls under the definition of a cult because the Soka Gakkai has cult-like tendencies.

When Soka Gakkai members are pointed out to the Soka Gakkai, instead of thinking "Let's fix what's wrong with my religious group," they think of suppressing their critics (anti) and silencing them, which is a pattern of thinking and behavior of a fanatic of a religious cult, and the sarin gas attack (terrorism). I feel that the followers of Aum Shinrikyo at the time when it was founded must have had a similar pattern of thinking and behavior.

Believers in cult groups are unconsciously mind-controlled and brainwashed, so they don't think that they should change their way of thinking and behavior when criticism is pointed out to them. In this respect, their attitude is similar to that of the Chinese Communist Party towards the demands of human rights activists in Hong Kong, i.e., the fanatics of cult groups such as the Soka Gakkai are not normal human beings.

By the way, there is an organization called JCP in Japan, which is also anti-American and illegal in the United States.

It is well known that some anti-American organizations cooperate with each other in order to undermine this country by signing a pact called "Soko Kyodo Agreement" and facilitating agents of anti-Japanese and anti-American groups.

It is obvious that the JCP is an anti-American terrorist organization in nature and that the JCP is a cult-like organization when it signs an agreement with a religious cult.

From another point of view, the Soka Gakkai, to its followers, appears to be a huge organization that carries out fraudulent and criminal activities such as Ponzi schemes and network businesses. It also has elements of a black business, and believers who join the Soka Gakkai are becoming materially and mentally exhausted.

The following blog, run by Mr. Sinifié, exposes the reality of the Soka Gakkai. It contains the testimonies and experiences of many current and former Soka Gakkai members and ex-members who have left the Gakkai.

What is the Soka Gakkai - Seeking Dialogue - To Quietly Leave the Soka Gakkai
https://signifie.wordpress.com/

It is clear that this reality of the Soka Gakkai is far removed from the original role of religion, which is to provide individuals with peace of mind and spiritual support.

As the saying goes, "like begets friend," it is only natural for the Soka Gakkai to try to maintain a good relationship with the CPC.

However, many Chinese who have worked in Japan seem to dislike the Soka Gakkai and return to their countries.

Although the Soka Gakkai employs a different strategy than Aum Shinrikyo and has infiltrated many organizations such as corporations, police, fire departments, the Self-Defense Forces, and local government officials, the Soka Gakkai members who have infiltrated the Kasumigaseki bureaucracy and the Self-Defense Forces are considered dangerous to the U.S. because they are inherently dangerous.

Because they are essentially anti-American and may act as agents to cooperate with the CPC.

2020-08-11

anond:20200810225928

元増田性別がよく分からんが、男性仮定して書く

  1. メンズファッション誌を買う
  2. 気に入ったメーカー見つける
  3. その店に行く

これやれば良い。メンズファッション誌は細分化されているけどメンズクラブとかBeginとかLEONとか、その辺りの雑誌で良い

価格と好みにあったメーカー見つけたら出来れば店に行く。路面店でもモールでもその店の周りには同じくらいのターゲットの店があるから他も見て当初から浮気しても良い

あと、40代は量より質。ユニクロONと家庭用、OFFは良いメーカーにすべき。だから種類は要らない。とにかく良いもの買うと良い

どんなに頑張ってもユニクロでOFFのオシャレは無理。ぱっと見イケても生地感でNG

あとどんなメーカーでも初回だけは店が良い。実際見るのとネットは違う。返品無料だろうと関係ない。出来れば服の種類毎に初回は店がベスト。2回目以降はネットでも良いか

それとボトムスは何が何でも店が確実。どんなに自分で採寸しても履いてみたらガッカリはいくらでもある。まじでボトムスは店が良い。直しも出来るし店員トップスほどお世辞も言わないから失敗しない

2020-07-21

CASL2楽しかった

大学実験で触っただけだったしもう忘れたけど楽しかった思い出が残ってる。

当時課題で作ったコードがまだ残っていたので見てみたんだけどさっぱりわからない><

これなんだけどさ。

SAMP2	START	BEGIN
BEGIN	LAD	GR1, 1	;インクリメント、デクリメント用
	LAD	GR2, 0	;PINKの修飾子
	LAD	GR3, 12	;BLUEの修飾子
	LAD	GR5, #0020	;大文字と小文字の値の差
	LAD	GR6, #005A	;'Z'の値
AGN1	LD	GR4, PINK, GR2
	CALL	TOLOWER
	PUSH	0, GR4
	ADDA	GR2, GR1
	SUBA	GR3, GR1
	JNZ	AGN1
AGN2	POP	GR4
	ST	GR4, BLUE, GR3
	ADDA	GR3, GR1
	SUBA	GR2, GR1
	JNZ	AGN2
	RET
TOLOWER	CPA	GR4, GR6
	JPL	BYE	;GR4がZより大きかったら何もしない
	OR	GR4, GR5
BYE	RET
PINK	DC	'TOKYO[CHOFU]'
BLUE	DS	12
	END

2020-07-08

コロナ失業保険認定してもらったときに国に対して感じたこ

「下級国民なんぞ1匹死のうが100兆匹死のうが知ったことか、負け組なんぞ血税で助けてやらずに放置して餓死させとけ、その代わり神に選ばれし我々勝ち組上級国民である我々高級官僚政治家は、国の舵取りをするんだから税金を好きに収奪して使っていい」みたいな旧日本軍大本営とかナチス党の幹部から飛び出てきたような、頭のおかし攻撃的なエリート狂人みたいな人たちなんてものは、全然いなくて

ただ単に、行政業務の処理能力パンクしていて、助けられる人たちに限りがあったり、縦割り行政による弊害で、情報共有がなされないままに各々が最善と思ってやったことが、市井の人間や個人には国による白色テロしかいいようがないような仕打ち結果的になってしまうってだけなんだろうなと思う

そういう意味ではユリウス・カエサルが 「All bad precedents begin as justifiable measures.(どれほど悪い結果に終わったことでも、それがはじめられたそもそも動機善意であった)」っていうのは、いつまでもなくならない難しい命題なんだろうな

まぁ、貰えるもん貰って仕事も決まったからこそ落ち着いてこう考えられるんだけど、ほんとに俺が一番最初に書いたような、絵にかいたような選民思想エリートなんてホント日本にいるんだろうかね?と不思議に思う

2020-06-15

DeepLぬきたしに敗北する

DeepLがこれまでにない精度で翻訳をしてくれると聞いたので、ぬきたしの中のから好きなセリフ翻訳してもらいました。

翻訳前の日本語はBANの可能性があるのでなしでお願いします。

結果は以下の通りです。十分な精度があるようにも見えますが、ぬきたしの魅力であるドギツイ下ネタ要素を削除してしまうことがありました。

やはり、これからもまだ翻訳家の仕事はなくなりそうにありませんね。

Which mouth cunt is the one that's been talking nuptial?

What's with that face? What's that look on your face? Open your mouth cunt and give me an answer. Open your mouth and put a sir on before and after you open your mouth and spit out your cum. Got it, Tadpole?

OK! we will now begin our morning erection summit. Speak in the language of the dick here. I want you to listen to me like you do when you listen to a hypnotic voice, with a little pussy juice coming out of your eardrums to get a good eardrum passage. That's good!

The sea is a cunt. Recap!

Is this Tom? Yes, it's a dick.

The Groman Dam has broken and a man juice flood is brewing.

Now, I'm going to give the glans a thirty-three-seven beat so that you can prepare for the event with anal tightening and no illness or accident. It's "Anne Anne Hammett".

Impregnate her, impregnate her, Oraa! Get it up, get it up, get it up. Impregnate, impregnate, impregnate, impregnate, ora, ora, ora!


ヌプヌプ喋っているが、「talking nuptial」と翻訳されたのは狙っているのかなんなのか。nuptialは結婚の、交尾のの意味

キンタマジャクシ!がTadpoleと、単なるオタマジャクシ呼ばわりされるのは心外しかし、こういう固有名詞じみた言葉翻訳は難しいでしょうね。

アンアンハメ拍子が、It's "Anne Anne Hammett"と、訳されてしまうのも、やはり固有名詞的な翻訳の難しさなんでしょうね。

2020-03-29

anond:20200329000027

ちょっと違うかもしれないけど、池上遼一史村翔の『begin』って漫画

ヤクザ+若手政治家 VS 米軍 VS 習近平

な構図。

直接対決というよりは、政治的な立ち回りで米軍日本から追い出す話ではあるけれど。

2020-03-25

Principal photography for the first season was scheduled to begin on July 26, 2010,[5] and the primary location was the Paint Hall Studios in Belfast, Northern Ireland.[92] Exterior sc

https://oomnitza.zendesk.com/hc/en-us/community/posts/360041943414-26-03-2020-Место-под-солнцем-29-серия-смотреть-бесплатно-в-хорошем-качестве-от-26-марта-

https://oomnitza.zendesk.com/hc/en-us/community/posts/360041947494--В-шаге-от-рая-17-серия-Россия-1-26-03-2020-смотреть-бесплатно-в-хорошем-качестве-

https://oomnitza.zendesk.com/hc/tvv/community/posts/360042121373-26-03-2020-Жизнь-после-жизни-9-серия-смотреть-качество-HD-от-26-марта

https://oomnitza.zendesk.com/hc/yjb/community/posts/360042126793-26-03-2020-В-шаге-от-рая-15-серия-Россия-1-смотреть-бесплатно-в-хорошем-качестве-

https://oomnitza.zendesk.com/hc/en-us/community/posts/360041949154--Доктор-Вера-15-серия-26-03-2020-качество-HD-от-26-марта-

https://oomnitza.zendesk.com/hc/tvv/community/posts/360041947494--В-шаге-от-рая-17-серия-Россия-1-26-03-2020-смотреть-бесплатно-в-хорошем-качестве-

https://oomnitza.zendesk.com/hc/tvv/community/posts/360042121893--Жизнь-после-жизни-11-серия-26-03-2020-смотреть-качество-HD-от-26-марта-

https://oomnitza.zendesk.com/hc/ltv/community/posts/360041942874--Место-под-солнцем-27-серия-26-03-2020-смотреть-качество-HD-

https://oomnitza.zendesk.com/hc/yjb/community/posts/360041942874--Место-под-солнцем-27-серия-26-03-2020-смотреть-качество-HD-

o units in different countries.[59] Benioff and Weiss write each of their episodes together, with one of them writing the first half of the script and the other the second half. After that they begin with passing the drafts back and forth to make notes and rewrite parts of it.[18]

https://oomnitza.zendesk.com/hc/en-us/community/posts/360041949454--Доктор-Вера-17-серия-26-03-2020-хорошее-качество-смотреть-от-26-марта-

https://oomnitza.zendesk.com/hc/en-us/community/posts/360042127973--Отречение-23-серия-украина-26-03-2020-в-хорошем-качестве-от-26-марта-

https://oomnitza.zendesk.com/hc/ltv/community/posts/360041949614--Доктор-Вера-17-серия-26-03-2020-качество-HD-

https://oomnitza.zendesk.com/hc/yjb/community/posts/360041943614-26-03-2020-Отражение-радуги-11-серия-в-хорошем-качестве-от-26-марта-

https://oomnitza.zendesk.com/hc/yjb/community/posts/360042128353--Отречение-25-серия-украина-ТРК-26-03-2020-хорошее-качество-смотреть-от-26-марта-

https://oomnitza.zendesk.com/hc/ltv/community/posts/360042125953--Отражение-радуги-13-серия-26-03-2020-смотреть-в-хорошем-качестве-

https://oomnitza.zendesk.com/hc/tvv/community/posts/360042122893-26-03-2020-Отражение-радуги-11-серия-последние-серии-смотреть-

https://oomnitza.zendesk.com/hc/tvv/community/posts/360042126173-26-03-2020-В-шаге-от-рая-13-серия-Россия-1-все-серии-сезона-

https://oomnitza.zendesk.com/hc/ltv/community/posts/360041949514-26-03-2020-Доктор-Вера-17-серия-смотреть-качество-HD-от-26-марта

2020-03-01

豪州児童ポルノSAOの件やはり日本団体絡みだったか

案の定ヒューマンライツナウ絡みだった模様。

大方またECPATヒューマンライツナウ辺りだろうとは思っていたけどまんま予想通りだと笑えないね

しかしこの人達からこの手の海外を使ったポリシーロンダリング所謂マッチポンプを使う手口が当時から全く変わっていないから呆れ果てるよね。

当時の児童ポルノの件にしても国連の件にしてもそうだけど、この手の手法は当時から行っている事だから

でも最近ではこの手の手法を多用しすぎた事でその手口も世間認識され、尚且つ創作物規制を行った国では日本より遥かに犯罪率が高い現状をみても効果がないか悪化を招いたのは事実なのに今だ児童ポルノ子供を盾にすれば、規制推し進めるのも許されると言う思い上がりが本当に腹が立つよね。

現状どう見てもこの手の規制弊害が出てしまっているのは事実だし、これ等の規制捜査撹乱を逆に非難されても良い状況にまでなりつつあるのにね。

何より今までこの手の創作物規制推し進めていた国連やらキリスト教内部やらで実在児童に対して性的虐待が多く行われていましたと言う事実もある訳だし。

それこそまたいつもの様にこの手の規制を進めようとしていた人が実は実在児童に対して性的虐待を行う人でしたと言ういつものパターンもあり得るかもね(苦笑)


それと当時から捕鯨環境問題には多くのフェミニスト団体関係していたのは指摘されていたし、この件でも指摘されているのを見てもそういう事なのだろうと思う。

本当にこの人達はただ自分の嫌いなものを潰す為に児童ポルノやら子供権利悪用して、実在児童保護に関しては寄り状況を悪化させているのだから最悪だと思う。

しかし去年の国連の件と言い、こいつらもいつも2月から3月頃に騒ぎ出すよね。

まるで省庁や法案の動きみたいなのはいつもながら不思議

それこそこの手の団体予算関係とかあるのかね?

2019-11-09

最も主人公に向かない職業 ブコメに挙げられた例に近いマンガ紹介

政財界を裏からあやつる黒幕

野望の王国

暴力による日本制覇を目指す東京大学法学部卒の青年主人公

自分の息のかかった議員総理にしようと画策する話がある。

愛犬を焼き殺したり自分の尿を飲ませたり暗殺のために病院を爆破したりと、暴力に次ぐ暴力描写で頭のネジが吹っ飛んでる漫画だが、原作者は『美味しんぼ』の雁屋哲

BEGIN

ヤクザ青年官僚青年デュアル主人公が、二人三脚で片方は暴力で、もう片方は政治の力で日本を変えようとする漫画

ヤクザの方は日本暴力団→マカオマフィア共産党の重鎮→習近平中国の中枢に接近し、日本国防上の驚異を無くすため中国民主化を画策する。

官僚の方は政治家になり「沖縄から米軍基地を追い出すには、核武装40歳"以上"の徴兵制必要だ」と主張して、米国依存からの脱却を目指す。

自立しようとする日本激怒した米国中国に「尖閣諸島侵略して良いよ。黙ってみてるから。これで日本米軍の有り難みが分かるだろ」と密約して…みたいな話。

社史編纂担当者

ヒストリエ

社史編纂室ではないが国の歴史編纂室という例で…。

主人公は、アレクサンドロス大王に仕えた書記官エウメネス

アレクサンドロス大王と言えば、「世界の果てに到達する」というジャンプ漫画的な夢を持ってヨーロッパから中東アジアあたりまで進攻したものの、部下たちから「もう勘弁してくれ」と悲願され帰還。死ぬ間際に「一番強えヤツが俺の後継者だ!」と大迷惑遺言を残し王国分裂を招いたことで知られる大英雄

そんなアレクサンドロス大王そばで見守り歴史に記録するのが主人公仕事漫画の中のアレクサンドロス大王はまだ青年に成り立ての歳で、歴史に残るようなことは成し遂げていない。ひょっとしたら今後「歴史書に残された記述主人公歴史改竄したデマだった」なんて展開もあるかもしれない。




anond:20191108201253

2019-10-23

anond:20191023190834

Pythonインタプリタがあるならこれだな

import random

import string

''.join(random.SystemRandom().choice(string.ascii_letters) for _ in range(8))

パスワードも許されている文字範囲を気にしつつこんな感じで作ってる。

C++17が使えるならこんな感じかなぁ...

#include <algorithm>

#include <iostream>

#include <random>

#include <string>

int main(void)

{

std::string input = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

std::random_device rnd;

std::string result;

std::sample(input.begin(),

input.end(),

std::back_inserter(result),

8,

rnd);

std::cout << result << std::endl;

return 0;

}

2019-09-19

毎朝の地下鉄で、BEGINの比嘉さんにそっくりな人を見かける

ふっくら体型に、濃い目の顔立ち。なんとかキャップと云う帽子も。

どこからどう見ても、あんBEGINの比嘉さんやろ

てな人。

2019-06-25

女に生まれたかった!!

今、黒いレザーのライダースジャケットを探している。

以前着ていたものものは合皮が劣化してしまい、ある日ポロポロと崩れてきた。

長い間世話になったことに感謝をして、今は次のを探している。

余計なところにポケットがついていたり、シンプルすぎたりちょうどいいものはなかなかない。

次の休日には、先週届いた青いスカートを履くのを楽しみにしている。紺ではなく原色に近いロング。

白いトップスを合わせたいけど、どんなのにしようか悩んでいる。

今はsnidelのノースリーブブラウスを合わせるつもりでいるが、他にも合うものを探したい。

女性の服っていいよねー。

可愛いし、綺麗だし、柔らかいし、安い。

男性には男性のおしゃれがあるしそっちを楽しめばいいかと思うんだろうが、

私はBeginよりもFINEBOYSよりもLEONよりもPOPEYEよりもwithやmoreminaSPURやFEDGEが好きである

2019-03-24

anond:20190324094739

SQLアンチパターンではないが、デッドロックについても投げっぱなしのあのSELECT FOR UPDATEの説明はなんなのかね。

1回のトランザクションでupdateを2回発行する場合と1回のSQL複数行のアップデートをする時はデッドロックリスク考慮するってだけで、かなり初心者にはありがたいと思うんだけどね。

1回のトランザクション複数回update文を投げるケース

tA =# begin;
tA =# update t1 set column = value where id = 1;

tB =# begin;
tB =# update t1 set column = value where id = 2;

tA =# update t1 set column = value where id = 2;
tB =# update t1 set column = value where id = 1;
tB =# ERROR:  デッドロックを検出しました

1回のSQL複数行のアップデート文を発行するケース

tA =# begin;
tA =# update t1 set column = value where id = 1;

tB =# begin;
tB =# update t1 set column = value -- update all record

tA =# update t1 set column = value where id = 2;
tA =# ERROR:  デッドロックを検出しました

あと、先勝ち後負けを実現するのはSELECT FOR UPDATEではなく楽観的ロックな。

tA =# begin;
tA =# select updated_at from t1 where id = 1;
         updated_at         
----------------------------
 2019-03-24 06:17:37.952893

tB =# begin;
tB =# select updated_at from t1 where id = 1;
         updated_at         
----------------------------
 2019-03-24 06:17:37.952893

tA =# update t1 set column = column - 1 where id = 1 and update_at = '2019-03-24 06:17:37.952893' and column > 0;
UPDATE 1
tB =# update t1 set column = column - 1 where id = 1 and update_at = '2019-03-24 06:17:37.952893' and column > 0;
UPDATE 0

MySQL存在しないレコード更新しようとするとギャップロックになるから注意な。

2019-01-16

開始→start

終了→end

startの反対はstopだし、endの反対はbeginだよね?

でも開始の反対は終了だし…

おかしいのは英語日本語どっち!?

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;
}

ログイン ユーザー登録
ようこそ ゲスト さん