「テキスト」を含む日記 RSS

はてなキーワード: テキストとは

2019-01-20

犯罪性が高いなんて意味が分からいからな

 1995年から2005年までの何か良かったのか記録してある動画を見せて当時が素晴らしかたことを

悪人に見せつければ平和になることだから犯罪性が高いとか理解できないし、お前が犯罪性が高いように

したいだけだろカス

 犯罪性がないと、お前の仕事自体が終わるし、意味が無くなって鬱病になるからな。

みんなが笑顔で何も危険なこと、最悪なことがないとお前の仕事テキストが生成されないし、

なんにしても、現実的日本が穏やかで危険なことがないようにされるとお前が最悪になるだけだろカス

2019-01-18

ニートしてたけど、明日センターだー

三春学校に通えなくなり、うつの診察を受け、それから通院しつつ休養。先生単位アドバイスを受けつつ、午後からとか6時間目だけとか出席しながらなんとか卒業できて、卒業浪人してた。って言っても相変わらず自律神経がいかれていて朝は起きれないし、躁のけがあって学習計画もかなりめちゃくちゃなひどいものだった(例えばある日は「旧帝大なら絶対いける!」という気になりすごい勢いで机に向かうのだけど、次の日には「そんなの無理に決まってる」と布団で一日過ごしたりしてた)。結局、周りからたらこ一年ニートのように過ごしていた。ひどいもんだよ。昼に起きて、何したか覚えていないまま夜になって、寝る。それの繰り返し。死にてー。

今も大学病院に通っていて、なるべく1日の活動時間を増やせるよう睡眠リズムをずっと調整している。僕はこの一年あくまで休養の一年と捉えるけれど(だからもう一年勉強のために欲しい!とあらぬ欲をおこしてしまう)、僕をとりま世界がそうも長い時間穏やかに待ってくれないのも事実であると感じてる。なんだかんだで学歴は欲しい。けれど今年はダメだった。じゃあ来年は?来年ちゃん勉強できるの?と頭でぐるぐる考える。僕はまだ19歳で成功経験も乏しく、それでいてうつ患者であるから、はっきりと「来年は元気になって、ここら辺の大学を狙える」と断言できない。うつになってからずっと自己分析をずっとずっと続けてきたけど、あるところで「でも自分信用できないな」という結論にたどり着き、その時は目の前が真っ暗になった。躁うつはこう言った点でもすごく厄介な病だと思う。

いやー。何してたか一年。ほんと何もしてない。センター前日くらい何かするだろうと思ってたけど漢文テキスト開いただけだった。やだなー。一年、つらかったなー。手帳とかiOSメモ思考足跡が残っているけど、それを見るとものすごく悩んだ、悪く言えば悩んだだけの一年だったみたい。つらかった。両親とうまくいかなかったな。人間として色々おかしい面がある。対話ができなかった、悲しい。家を出たい。でも一人暮らしをしたら生活リズム的に退学コースだろうと簡単想像できる。つらい。

ニートみたいな生活だったけど、ニートみたいな生活の中で人間的に成長できた面も多くある。いろんな観照や諦念が得られた。それらはこれから人生においてきっとかけがえのないものになるであろうと予想する。二浪するかは知らないけれど、まあとりあえず明日センターは頑張って行こうじゃないかという気でいる。

anond:20190118153203

んんんん?これ多分認識が違うな

ホンヤク風テキスト原作のもの英語版進出したのか?

2019-01-15

anond:20190115183204

サーバーに保存されるってウェブサービスだよねえ

DropboxPaperとかEvernoteの類いになるのかな?

私はAtomとGoogleBackup&Syncの組み合わせでテキスト書いてる

メモ類はGoogleKeep

anond:20190115101020

言ってるお話とはずれるとわかってるけど

そういう本職シナリオライターという毛色違うもののちを容れたら

ソシャゲテキストにもなんか化学反応起きたりしないのかね

長いスパンストーリー作るノウハウができるとか

anond:20190115101020

どう説明すればいいのやらって、

相談してくる前にひとつでもゲームしてみたら「自分のやりたいシナリオってこれじゃない」って気付くと思うんだけどなあ。

そうしてもらえばいいんじゃないの?

適当ソシャゲをいくつか試しにやってもらって、「こういうテキスト書く仕事なら紹介できるけどそれでもいいの?」って念押しすりゃ済む話じゃないん?

カテゴリーエラーをどう説明すればいいのやら

現状、「シナリオライター」をそれなりに募集しているのはソシャゲ業界くらいだ。

から映画やらドラマやらのシナリオライター志望から相談を受けることがある。

でも真面目な話、仕事を紹介しようがないのがほとんど。

最初

名前だけは『シナリオライター』だけど、映像系の人からするととてもシナリオとは言えないテキストだよ」

と念を押す。

ここで返ってくる答えはまず

「え、でもシナリオシナリオでしょ」

この答えからしてゲーム自体ほとんど遊んだことがないんだろう、と判断せざるを得ない。

ソシャゲライターがまずする仕事

キャラクターが技を出す時の掛け声とか、進化した時の一言コメントとか、あるいはユーザーログインした時に言ってくる言葉とかそういうやつだ。

テキストを読ませるのがメインになるテキストシュミレーション系なら多少事情は違ってくるにしても、基本は立ち絵紙芝居だ。

絵で見せられることはものすごく制限されるし、どうしても説明台詞は多くなる。

ただそこを呑んで書いてもらえるのなら、という気持ち質問してみる。

最近遊んで面白かったゲームとかある?」

「ないけど……ほら、ゲームが好きすぎたらゲーム仕事に就けないとか聞くし」

それはひとつの真理かもしれない。

だけどそもそもの仕組みも知らなくて仕事に就けるわけがない、という考えにはならないんだろうか。

大体映画ドラマについてはリアルタイム好き嫌いを語れるんだよね?

まさかそっちに行けないのは自分が好きすぎるからだって思ってる?

まれたくはないので大抵は「年齢的に難しいと思うよ」でお茶を濁すんだけど。

相談してくる前にひとつでもゲームしてみたら「自分のやりたいシナリオってこれじゃない」って気付くと思うんだけどなあ。

もし「すっごい楽しかたか絶対やりたいって思った!」って言ってもらえれば本気で紹介するつもりはあるんだからさ。

2019-01-14

anond:20190114180149

中学からやり直したらどうかな

大人のための数学をやりなおすのはサイトがあるから

そこで紹介されてる参考書を使ってみなよ

https://prokatsu.com/math_books/

放送大学とか他の通信制大学もそうだけど、

授業で使ってるテキストだけじゃ理解が進まないか

副読本みたいなのは必要だよ

2019-01-11

明治時代大審院が凄すぎた 昭和20年~39年の裁判所も凄かった

 善良だったし、やりがいがあった。明治なんて、検事長から「貴院の明鑑にかなうところである」みたいに言ってたこ

平成で言うなら、プレステ裁判所で、ファイナルファンタジー6,7,9が判決みたいなもの。最盛期だった

 昭和20年~39年の裁判所は、超絶エロテキストで、今誰もが殺到しているオナニー画像みたいなもの

 

 それ以外の時代はマジクソで、本物は近寄らない。プレステ2以降のクソゲーとか、つまんねーグロ画像

昭和50年代判決は、書いたことはあるけど、あれは季節もので、状況がないと味わえないし、やってる裁判官は禿げが多い

 平成は悪

裁判所判例ダメになった経緯

 ア 明治時代判決はクソ神だった。死ぬほど詳細に検討したし、裁判長検事長は、日本島に出現した文章スーパースターとして崇められた。

 イ 大正時代に入って知識専門オタク化してクソになった、以後、終戦まで、マジクソ。

 ウ 戦後アメリカから死ぬほど日本に合わない、アウト性的コンテンツであるアメリカ憲法押し付けられたため、当初から使うつもりないの全開で

   大量の法律を書き散らしてアメリカを全力でだまし、実務としては、東大法学部卒で司法試験に通った権力者がいいようにできるテキストコンテンツ

   なったので、昭和39年まで日本人受けしてクソ流行った。

 エ 昭和40年代に、調子に乗りすぎて法解釈が高度化していたが、当時はあまりに狂い過ぎていて自分おかしいことに裁判官らが気づいてなかった。

 オ その背後で、祭りみたいにやってたオヤジジジイ裁判官がいて、権力真夏の話過ぎて狂い過ぎてて現在では趣旨不明

 カ 昭和50年~64年は、アニメセリフか、季節物のジジイ詩集と化し、悪質でないものの、判例ゴミに成り、趣旨不明になった。

 キ 平成以後の判例は、ゴミ

 このような経緯でダメになって今は死ぬほど最悪。

2019-01-08

デザイン料は高いかいか

【2.9万RT底辺デザイナーの私が“デザイン料金表”を作ったわけ。

https://note.mu/h_n_o_z/n/nd7c6d4d2b162

このnoteホッテントリにあがっている。

で、本当にいろいろと思うところがあるので、現役デザイナー立場からとりとめなく書いてみようと思う。別に暇ではない。忙しい業務の合間合間に書いているのだ。いやほんと。

名刺発注してみよう

わかりやすく、具体的な例からいこう。

あなたは若きステーキ屋さんで、ついに念願叶い自分店舗を持つことができた。

士業や取引先と関わる機会も増えたので、名刺が無いとどうにも格好がつかない。よし作ろう。

名刺の手に入れ方は、大別すると2つだ。印刷屋に頼むか、デザイナーに頼むか。どう違うのか?

大抵の印刷屋にはDTPオペレーター、つまりデザイン印刷データにする人」がいる。特に名刺に特化したサービスをやってる印刷屋は、テキストを流し込む(これがDTPオペレーション)だけで印刷データまで進められるテンプレートを持っている。印刷屋に支払う料金は、おおむねこDTPオペレーション業務印刷代をあわせた額で計算される。一方、デザイナーに払う料金は、これに加えて「デザイン費」がかかる。デザイン費ってなんだよ?

デザインかい概念

ここで言うデザインとは、かなり抽象的な概念である。例えばあなたが「名刺には自分顔写真を載せたいな」と思ったとしよう。なぜならあなたヒゲサングラスと、肉に塩を振る仕草の似合うナイスガイを自負しているかである。そして印刷屋に「顔写真も載せてくれ」と頼んだとする。これもデザインである。えー!

小難しく言えば、デザインとは機能設計のことである顔写真も載せましょう。なぜか? あなたナイスガイから写真があれば店の紹介をするときに「あのナイスガイがやっている店です」と説明やすくなる。名刺を見た人は、「あぁ、あのナイスガイがやってる店ね!」となる。これは紛れもなく機能なのだ。一方、あなた別にナイスガイでもなんでもないなら、写真を載せる必要はなくなる。失礼だけど、正直言ってインク無駄からである(まぁ、顔を覚えてもらうためとかはあるけどね)。

たか名刺といえど、できることは無限にありうる。「どうせ名刺を配るなら、もっと機能的な名刺が良い。そのためなら金を多少かけてもいい(そのほうが儲かりそうだから)」そういう時はデザイナーの出番である。このデザイナーという生き物は、あなた普通の人よりもステーキに関して熟練しているように、デザインに関してはなかなか熟練している(してないのもいる)。そういうわけで、普通の人よりは良い(=機能的な)デザイン、例えば「お前はそんなにナイスガイじゃないぞ」とか……を持ってくるわけだ。この作業結構時間技術知識店舗とそのイメージ、配る層、名刺目的名刺が要るスタッフの人数、人が増えるかもしれないなら、その展開も印刷やすい版面、チラシやショップカードへの展開etcetc…)がいるので、少なくともテンプレートに流し込むよりはお金がかかるわけである

-

気づいた人もいるだろうが、普通の人も結構日常的にデザインをやっている。まぁ普通の人が日常的に肉を焼くのと大体同じ理屈である自分会社にはもっと機能的な名刺パンフレットwebページ必要だ、と判断されたとき、その仕事プロデザイナーに任せられる。なぜならその方が早いし機能的なものが出てくるからだ。そういうわけで我々デザイナーは、デザインしかできないのにメシが食えるわけである(あとDTP業務チョットデキル)。

それで題名に戻ると、安いかどうかは経営判断。小さなステーキ店舗設計を、何百億もかけて世界一建築士に頼みはしないだろう。しかしだからといって、大きめのテントで間に合わせたりもしないだろう(やるかもしれないが……)。

いかどうかは……デザイナー生活次第。デザイナーも、あまり安すぎると生活が終わってしまうので、極端に安い金額ではやりたくてもできない。一方で、好きなジャンル案件にはかけちゃいけないくらいの時間を使いがちだ。そんなわけで、たいして儲かってもないのに(ほんとだよ)我々は常に寝不足である

無論、我々には常に業務改善(DTP業務において特に)の義務があるが、業界全体では正直言ってあまり進展しているようには見えん。バージョン管理すら知らないのは怠慢といえる。我々はよりよいデザインで世の中を満たすために、僅かな努力も惜しむべきではない。最後にかっこいいことを言ってみた。

適当にQandAコーナー

いや、きれいな飾り罫やイラストを足すのがデザインでしょ?

これそのものデザインではない。載せるかどうか、どれを載せるかを決めるのがデザインであるデザイナーは飾り罫を追加する「作業DTP業務)」も兼任していることが多いので、よく勘違いされる。

でも、「ここに飾り罫置いてください」って頼んだら黙って置いてくれたよ。っていうか全部自分で決めて(=自分デザインして)発注してる

あなたが頼んでいる相手は多分デザイナーではなく、DTPオペレーターだ。最悪の場合、その仲介業者である。その実態は、仲介業者あなたの指示をDTPオペに丸投げし、言われた通りのものあなたに返すという仕組みである。そこにデザイナーはいない。

同人活動発注しようとしたら高すぎるんだけど

これは「同人ストーリープロ脚本家発注しようとしたら高すぎるんだけど」と同じ理屈なので、どうせなら自分たちでやろうぜ。僕は自分でやった(偶然にも自分プロだった)。プロデザイナーサークルに引き込むのは本当にオススメだとアドバイスします(私信デザイナーへ。今のうちに逃げろ!)

なんでこの業界料金表無いの?

一応ある。例えばJAGDAとか。http://www.jagda.or.jp/designfee/cf_fee.html

あの料金表でも十分稼げるんじゃね?

病気になったり、一時的にヒマになったら詰みそう。会社でもフリーランスでも理屈は一緒。ちなみに時給2000円で仕事をみっちり埋められても、32万円/人月である。僕はもっと稼がないと怒られる(リアル話)。

anond:20190108032500

宮崎放送柳田哲志アナウンサー2008年6月14日生放送番組で泥んこ尻相撲勝負中に土俵外の水田に頭から突っ込み脊椎を損傷する重症を負う。この際に水田から「起こして…起こして…」と助けを乞うアナの声が宮崎お茶の間に届けられた。できたばかりの動画投稿サイト等を通じて2chでもおおいに話題となった。それがあまりに弱々しくか細い声だったのでテキストでは半角カタカナで「オコシテ…オコシテ…」と表記されることが多くなった。

それが、人外になった元人間自分を殺してくれと懇願するという物語のよくあるパターンと結びつき、「コロシテ…コロシテ…」というネタに改変され拡散されることとなった。

2019-01-05

やっべオープンオフィス糞いわ

メモ帳からコピーしたシンプルテキストエクセルセルに貼り付けられねええええええええ

こんな単純なことがなんでできねーんだ!?!?!?!?

マジでなぞ

これなら単純に表組み使いたいだけならcsvエクセル風に表示するフリーソフトつかったほうが100000000000000倍ましだわ

2019-01-04

anond:20190104170016

カギカッコマン「苦手なのは理解するぞ。だが、実際カギカッコマンは.md書いてる訳でもないので文章を強調する手段プレイテキストしか存在しないのだ!」

カギカッコウーマン「その代りちゃんと『』だったり【】だったり≪≫だったり、色々使いこなしてるわよ?」

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:20190102063518

北大の人がいたので懐かしくなって自分も書いてみたが、どうやら消してしまったらしい。勿体ない。

だがまぁ見かけたので僕も自分語りなどしてみようと思う。もう20年は前の話なので話半分程度に聞いて欲しい。あ、とくに受験に役立つ話とかは無いです。自分語りのみです。

中学時代

 関東のどこにでもある公立中学に通っていた。

 成績は良い方だったが先生にウケがいい方だったかというと別にそういうわけでもない。虐められていたわけでもないが、自分にはよく分からない理由からかわれることがあった。

 当時は少し不思議がる程度だったのだが、今にして思えばクラスの中でも割と、いやかなり浮いていたのだとは思う。

 成績はトップクラス運動もできた(サッカー部で足が速かった)から大事に至らなかっただけで、先生にも同級生にも興味が無く、他人不快にさせても気付かず、いつもぼんやりとしていて一人遊びが好きな子供だったらしい。昔、母親に「あんたは自分が虐められていても気付かなそう」と言われたことを今でも覚えているが、つまりはそういう子供だったようだ。今でも他人の心が分からないのは変わっておらず、割と苦労することが多い。

 暢気な性格であり、行く高校も学区内で近くて偏差値が高いところ(親が文句を言わないところ)であればいい、と思っていた。滑り止めも受ける気がなかったので調べもしなかった。今なら分かるが、そういうとこやぞ。

 その上適当でも受かるのが分かっていたので真面目に受験勉強もしていなかったところ、みかねた両親からとにかくお前はもっと偏差値の高いところを一校受けろ、と言われ学芸大附属高校を受けることになった。

 自主学習では限界があるということで近くの塾にも行ったが、バイト大学生先生過去問を見せても的確な解説が帰ってくるでもなく困った様子だった。そこで使っていた教材とのレベル差も大概だったしまぁ仕方ない。というかそこはあくま学校の授業について行けない生徒の補習的な個人塾だったようで、よく考えれば筋違いである。高難易度受験校に受かろうとするならそれ相応のところに行く必要があったはずだ。まぁ当時は僕も両親もそんなことはよく知らなかったし、塾ならどこでもいいだろう、という程度の発想しか無かった。

高校時代

 学芸大附属高校には当然かすりもせず、第一希望公立高校入学する。

 世の中には自分と似たレベルあるいはそれ以上で勉強が出来る奴がいるんだなぁ、というのをようやく理解するが、この頃でも生来ぼんやりした性質は変わらずにのほほんと学校生活を過ごしていたらしい。変人の多い学校だったのであまり浮いていなかったようだがたぶん中学の時と余り変わっていなかったはずだ。

 今でも覚えているのだが、廊下ですれ違った先生挨拶をしながら「この人どこかで見た顔だな……」と思っていたが、よく考えたら一年世界史の授業をしてくれた先生だった、という事があった。他人の顔や名前を覚えるのが苦手だと思っていたが、そもそも他人に興味が無いのだ、という事に気付かせてくれる出来事であった。今でも仕事で会う人の顔と名前が一致せずに苦労しているし、これはどうにもならないのだろう。

 大学受験という物に本腰を入れ始めたのは三年からだった。

 といっても例によって「まぁどこでもいいかな……」という感じだったのだが、両親から「国公立」「一人暮らし」「浪人は一回まで」という条件を出され、紆余曲折合って北大を志望することになった。

学校に進路相談をするでもなく、成績とのギャップに悩むでもなく、軽く決めたので相変わらずアレな性格だったらしい。

 友人に東大を受ける奴がいて、そいつ天才だったので自分の分というのはよく分かっていた。数IIIの定期テスト理系コースの学年平均点が30点くらいだった(僕もそんなものだった)のに、そいつだけ満点近くを取っていたし、暇つぶし数学の高難易度問題集をやるような奴だった。世界が違うなぁ、というのが正直なところだったから妬むこともなかった。

 受ける模試はいいとこD判定(一度だけCが出た)、予備校には行ったが授業が身になった気はせず、もっぱら図書室や自習室でひたすら自習する日々であった。

 どこに自信があったのかは知らないが、センター何となく取れると思っていた。実際目標ラインの点数を取れた。

 過去問を解いていても2次試験がイケる自信は全くなかったが、恐ろしいくらい焦ることがなかった。他人事のように淡々勉強をし、まぁなんとかなるでしょ、と楽天的な構えを取っていた。……もっとも、この性質のツケは後で受け取ることになるのだが……

 試験から帰ってきてから溜まっていたエロゲー(年齢がアレだがもう時効だと思うので勘弁していただきたい)をプレイして春休みを過ごし、ネット合格通知を見ることになった。合格祝いに買って貰ったノートPC月姫プレイしたことを良く覚えている。

 勉強自体特別なことは何もしなかった。テキストを読んでもよく分からなかったのでひたすら過去問を解いたことくらいだろうがそれだって目新しいことではないはずだ。

 まぁ、北大程度の人間から画期的な物を期待されても困る。そういうのは東大京大に行った人達に任せておきたい。

【その後】

 入ってからものほほんと過ごしていたところ、4年の時に8割受かるはずの院試に余裕で落ちて途方に暮れるという事になった。人生適当に過ごしていたことのツケをここで受けることになった……が、結果的には塞翁が馬という奴で何が幸で何が不幸かは分からない。

 冬の再試験を受けるかそれとも今から就職活動するか、と教授に言われたが、どうやら自分にはアカデミックな才能は無さそうだ、というのに薄々気付いていたので就職活動をすることにした。人間にも物事にも興味が薄く執着の無い人間にとって研究の道はあきらかに向いていないのでこれは正解だったと思う。

 といっても時期は既に秋、適当一社だけ受けてダメなら就職浪人でもするか、と思っていたところを拾って貰い、そのまま就職して今に至る。

 適当に選んだ会社だったが気付けば海外を飛び回ることになり営業のような技術のようなよく分からない仕事をしている。しんどいしんどいしさっさと仕事辞めたいとは毎日思っているが、給料がそこそこいいので未だに辞められていない。

 ソーシャルゲーム課金し、声優を追いかけ、両親に「あん結婚は」と追い立てられる普通ヲタク人生を送っている。誰か結婚して下さい(

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

理三受験の思い出

anond:20190102063518

こういうの書きたくなるね。自分が頑張ったことは思い入れがある。

微妙に書くところ間違えたので投稿しなおした。


小学生

関西田舎の町立小学校に通っていた。友達がみんな塾に行っていたのが楽しそうだった。

「僕も行きたい」と親に言ったことがあったが、なぜか断られた。

自分が子を持った今なら分かるが、3人目の私にお金をかける余裕がもはやなかったのだと思う。家にはアップライトピアノがあって姉が習っていたが、自分は習いたいと言ってもお茶を濁された。


父は会社勤め。ホームレス気質天才タイプ。母は専業主婦。真面目な秀才タイプ。親は教育に興味が無いわけではなかった。むしろかなり意識的独自戦略のようなものを持っていたと思う。

小6の夏休みに入ると、「レベルの高い学校に行くとめちゃくちゃ楽しい」などと、うまいこと母に言いくるめられて中学受験を決心した。


「力の五千題」とか「自由自在」を各教科買ってきて、夏休みに二回ほど通した。なにかババのようなものを掴まされたような気もしなくもなかったが、面白かったので続けた。

からは応用問題集、冬になると過去問をやった。模試は受けなかった。「自信を失わせたくなかったから」とあとで母から聞いた。どういう意味だ。

私立を2つ受けてどちらも合格した。ちなみに、受験直後の自分感触としては98%落ちたと思っていた。未だに謎である


中学生

中高一貫校寮生活が始まった。

強制的勉強する時間毎日3時間あった。小学生の頃とは比較にならないほど学校の授業を面白く感じたので、予習・復習をやった。みんながやっていたので、ラジオ英会話を毎朝聞いて、テキストを暗記した。完璧発音テキストの会話を一人で完全再現できるようにしていた。一年イギリス人先生普通の会話ができるようになった。
中学3年生のときに、全員がZ会模試を受けることになった。はじめての模試で超わくわくした。総合で全国100番位だった。初めて自分立ち位置を知った。思ってたより良いという感覚。でも同じクラスに全国一桁台とかが普通にいた。


音楽室に個室のピアノ部屋が5台分あった。昼休みにほぼ毎日通ったので、結構弾けるようになった。今考えると異常な環境である音大かっていう。親友ピアノが超すごいやつがいた。ヤマハをずっとやってきた人で、聴いたら即弾ける、ハ長調譜面初見で見て変ロ長調で弾ける、メロディを見ると即座にステキ伴奏を思いつく、など。理解不能であるピアノをメインの楽器にするのはやめようと思った。


高校生

下宿に移り、自由になった。学校以外で勉強しなくなった。暇なので、絵を描いたり生徒会をやったりピアノの人などを誘ってバンドをやったりと、生活を広げ始めた。

授業中に予習復習などすべて授業を聞きながら終わらせたので、成績は特に落ちなかった。

こういうことを書くと、舐めてるとか自慢とか思われるわけだが、違うんだ。

自分なりに一番効率が良い方法を追求していた。授業中に寝て、家で数時間独自勉強するみたいな非効率的なことはしたくなかったのだ。

授業は120%の集中力で聞く。それでも時間が余るので、次の予習をしたり、問題の別解を考えたりしていた。家で半徹夜で何時間勉強している人たちよりも結果的に長時間勉強していたと思う。だって毎日9時から17時まで勉強していたんだもの毎日7時間くらい集中して勉強しているのに、「増田勉強せずに成績が良いな」みたいなことを言われてたのは未だに納得がいかない。


高2で東大模試を受けてみると、理三以外はすべてA判定だった。理三だけが完全にE判定だったので、「は?しばくぞ」と思った。
なんかの奨学金アメリカにただで行けた。夏休みの一月まるまるESL漬けで楽しかった。自分英語力はあんまりしたことないと気づいた。同級生アラブ皇太子とかトルコ首相の息子とかがいた。そういうのも自分には無い。


高3になって流石にクラス空気も変わり、自分放課後勉強するようになった。小学生の時は夏休みから半年でなんとかなったけど、さすがに東大一年位はやらないとやばいだろという感覚があった。

一学期にあった駿台統一模試で、英数国の三教科の偏差値が80を超えていた。一方で、本来好きな理科がボロクソだった。準備不足を痛感して夏休みに強化することにした。


・高3夏休み

化学生物だった。教科書はさすがにすべて頭に入っていたので、いよいよ応用問題週に手を出すことにした。東大過去問をちら見すると、化学の出題の半分くらいは似たような問題しか出ないことがわかったので、同じ問題を何十回も解いた。滴定とか。30分かかって6割しか正当でいなかったところから、5分で100点の回答ができるようになった。時間が余るので、初めて見る問題ゆっくり考えられて便利。生物は、問題文に答えが書いてある。

一方で、わりと大丈夫そうな主要三教科は、根本的なところをやることにした。

数学

チャート式などは数冊終わっている状態大学への数学をひたすら解く。新しい問題は、ひたすら考える。未知の問題に解法の方針を立てる練習

英語

TIME誌を定期購読していたので、毎号気になる記事を一つまるまる訳してみる。超大変。NEWSWEEKにすればよかった。のだが、一年定期購読してしまったのでやるしかない。んで、訳したあとは要約を英語で書いてみる。ラジオ英会話ビジネス英語までランクアップしていた。正直東大受験ではこのレベルリスニングスピーキングは当時必要なかったので、聞き流していた。ハマっていたのはパーソナリティの訛りを真似すること。

国語

Z会小論文をやっていた。元来文章がそんなにうまくはなかったけれど、読むのも書くのも好きだったのでこれは半ば趣味結果的200字作文に多少役に立った。


・高3秋

9月学校最後イベントがあり、燃え尽きた。勉強は2ヶ月ほどお休み。焦りはなくはないが、みんなそれで合格するやつは合格するっていう先輩の像を見てきている。今回は自分がそれをやるほか無いという感覚。流石にバンド解散した。


・高3冬

10月から2月まで5ヶ月もある。


センター試験

英語198 

数学191 まさか満点じゃないとは。世知辛い東大理系はわりとこういう感覚だと思う。

国語167 古文漢文論説は150/150。小説めっちゃ間違えた。こういうこともある。

化学100 

倫理93  一応、山川倫理用語集を3回くらい読んだ。手抜き教科のつもりが、哲学に興味が芽生えた。大学に入ってから哲学系の本をたくさん読んだ。自己形成に大きな影響を与えた。人生何が大事わからん

合計

前記749/800

後期489/500

センター試験

ようやく赤本に取り掛かった。感想は、英語簡単すぎ、数学難しすぎ、国語意外とお得、理科けっこう簡単

というわけで薄々気づいていた数学不安定さと、国語のお得さに焦点をあてる。数学が0点でも受かる謎の計画をたてる。国語最後の一ヶ月だけ、古文漢文個人先生に習った。

ちなみに東大模試は3社2回とも全部受けて、最後を除いてすべてE。でも成績は徐々に上がって最後だけはC判定だったので、本番の頃にはB判定くらいになってるんじゃない?と思っていた。


・本番

当日はなぜか20時に寝て、25時に覚醒し以後眠れないというアホなことをした。

ただ全く寝てないわけでもないし、ただ少し眠いだけなのでやるしかない。


 点数非公開時代なので自己採点

国語 60/80 ほぼできた。

数学 40?/120 難しすぎ0完6半ワロタ。。1完だと思ってたのに、弥生門を出たところで配ってた駿台の速報を見たら計算ミス発覚。かなり暗くなったが寝たらわりと忘れた。

生物 50/60 多分まあまあできた。

化学 55/60 多分ほぼ間違えてない。

英語 120/120 まじで満点じゃね?と思った。

合計 325/440 数学が0点でもギリ受かるかも?と思った。

・発表当日

赤門から会場へ向かうと、のちの上クラになる姉が向こうからやってきた「あ!○○ちゃん、受かってたよ!」

弟に「ちゃん」づけはまあしょうがないとして、俺が知るより先に結果を言うなよ。未だに恨んでるぞ。

合格してから

家賃が安いという理由三鷹寮に申し込んだのだけれど、その書類を集める際に親の年収が600万であることを知った。そりゃ無理だわ、塾もピアノも。ちなみに中高は奨学金もらってた。それでも親は教育のために借金してたんじゃないかな。決定的に計算が合わない。ちなみに三鷹寮は生活費が安すぎて家庭教師バイトだけで異常に金持ちになった。楽器を買ったり海外旅行に行ったりした。ヨーロッパまで6万円で行けた時代である。さておき、感覚としては、医者になってまともな収入がある今よりも、当時は自由に使えるお金があった。人生まじで謎である

おじさんもなぜか未だに人生謎のままに頑張ってるけど、受験生の皆さんも頑張ってね。

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

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

「調べてみました!」系記事って叩かれてるけど便利だよな

私家版Wikipediaみたいな感じで芸能人とかの情報をサッと知るにはちょうどいい。

過去にこんな炎上がありました」みたいなのはWikipediaに載っていないことも多いし、その点でも価値がある。

検索結果が汚染される」という人もいるけど、それは単に検索オプション使えよって話で。

あと最近思ったのは、テレビの内容を書き起こしてTwitterの反応を付け足しただけのニュース記事

あれも価値を認めない人が多いけど、動画の書き起こしという点では便利なんだよな。

100年後には動画のほうが残ってなくて歴史学者は書き起こしから内容を調べてるかもしれないし、

そうでなくともテキスト化で検索可能状態にしておくことには意義がある。

YouTuberTikTokなんかを見てると「動画文化圏」や「アプリ文化圏」が今後もますます発達していくことが想定できる。

そういうsearchableでないコンテンツいかにsearchableにしていくかという点で、「ただ文字にしただけ」系記事価値はあると思うよ。

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