「message」を含む日記 RSS

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

2019-05-31

"REVOLUTION WILL NOT BE TELEVISED" by Gil Scott-Heron, 1970

You will not be able to stay home, brother

You will not be able to plug in, turn on and cop out

You will not be able to lose yourself on skag and skip out for beer during commercials

Because the revolution will not be televised.

The revolution will not be televised.

The revolution will not be brought to you by Xerox in 4 parts without commercial interruptions

The revolution will not show you pictures of Nixon blowing a bugle and leading a charge by John Mitchell, General Abrams and Mendel Rivers to eat hog maws confiscated from a Harlem sanctuary

The revolution will not be televised.

The revolution will not be brought to you by the Schaefer Award Theatre and will not star Natalie Woods and Steve McQueen or Bullwinkle and Julia

The revolution will not give your mouth sex appeal

The revolution will not get rid of the nubs

The revolution will not make you look five pounds thinner

Because the revolution will not be televised, brother.

There will be no pictures of you and Willie Mae pushing that shopping cart down the block on the dead run

Or trying to slide that color TV into a stolen ambulance

NBC will not be able predict the winner at 8:32 on reports from 29 districts

The revolution will not be televised.

There will be no pictures of pigs shooting down brothers in the instant replay

There will be no pictures of Whitney Young being run out of Harlem on a rail with brand new process

There will be no slow motion or still life of Roy Wilkens strolling through Watts in a Red, Black and Green liberation jumpsuit that he had been saving for just the proper occasion.

The revolution will not be televised.

Green Acres, The Beverly Hillbillies and Hooterville Junction will no longer be so goddamned relevant

And women will not care if Dick finally screwed Jane on Search for Tomorrow

Because Black people will be in the street looking for a brighter day

The revolution will not be televised.

There will be no highlights on the eleven o'clock news

And no pictures of hairy armed women liberationists and Jackie Onassis blowing her nose

The theme song will not be written by Jim Webb or Francis Scott Keys, nor sung by Glen Campbell, Tom Jones, Johnny Cash or Englebert Humperdink

The revolution will not be televised.

The revolution will not be right back after a message about a white tornado, white lightning, or white people

You will not have to worry about a dove in your bedroom, a tiger in your tank, or the giant in your toilet bowl

The revolution will not go better with Coke

The revolution will not fight the germs that may cause bad breath

The revolution will put you in the driver's seat.

The revolution will not be televised

Will not be televised

Will not be televised

Will not be televised

The revolution will be no re-run, brothers

The revolution will be live.

2019-04-18

Privacy Policy

ABW Coin built the MathX for Math Learner app as a Free app. This APP is provided by ABW Coin at no cost and is intended for use as is.

This page is used to inform app visitors regarding our policies with the collection, use, and disclosure of Personal Information if anyone decided to use our App.

If you choose to use our App, then you agree to the collection and use of information in relation to this policy.

Information Collection and Use

When using the APP, it only collects anonymous usage information to operate, improve and personalize the products. The APP does not collect any Personally Identifiable Information (PII) about you, nor does it match collected anonymous usage data with any 3rd party PII information.

Log Data

We want to inform you that whenever you use our App, in a case of an error in the app we collect data and information (through third party products) on your phone called Log Data. This Log Data may include information such as your device Internet Protocol (“IP”) address, device name, operating system version, the configuration of the app when utilizing our App, the time and date of your use of the App, and other statistics. If you use our app to read or post information on our app, we don't collect any information about your identity. If you identify yourself by sending us an e-mail containing personal information, then the information collected will be solely used to respond to your message. In addition to other information described in this policy, we may collect and share precise location information including the presence of connected devices via bluetooth, through methods such as partner mobile “SDKs”. This information may be used by itself, aggregated, or combined with mobile identifiers (such as IDFAs and Android IDs), and shared with other parties, for purposes related to advertising, attribution (e.g., measuring ad performance), analytics and research. You can remove your consent to having your location data collected by changing the settings on your device (but certain services may lose functionality as a result). You can also control options through your device’s opt-out settings which will: (i) tell advertisers to not use your in-app information from that device to gather information about your interests to target interest-based ads and (ii) inform some partners to halt further data collection and sharing from that device.

Service Providers

We may employ third-party companies and individuals due to the following reasons:

To facilitate our App;

To provide the App on our behalf;

To perform App-related services; or

To assist us in analyzing how our App is used.

We want to inform users of this App that these third parties have access to your Personal Information. The reason is to perform the tasks assigned to them on our behalf. However, they are obligated not to disclose or use the information for any other purpose.

Security

We value your trust in providing us your Personal Information, thus we are striving to use commercially acceptable means of protecting it. But remember that no method of transmission over the internet, or method of electronic storage is 100% secure and reliable, and we cannot guarantee its absolute security.

Links to Other Apps or Websites

This App may contain links to other Apps or Websites. If you click on a third-party link, you will be directed to that app or website. Note that these external apps or sites are not operated by us. Therefore, we strongly advise you to review the Privacy Policy of these apps or websites. We have no control over and assume no responsibility for the content, privacy policies, or practices of any third-party apps or websites or services.

Changes to This Privacy Policy

We may update our Privacy Policy from time to time. Thus, you are advised to review this page periodically for any changes. We will notify you of any changes by posting the new Privacy Policy on this page. These changes are effective immediately after they are posted on this page.

Contact Us

If you have any questions or suggestions about our Privacy Policy, do not hesitate to contact us

2019-03-09

GearBestでPCを買った顛末

あらすじ:

GearBestで品物を買った場合高く買った順に発送されるので運良く(悪く?)安く買ういつまでたっても発送されない事態に陥ります

現状3ヶ月経っていますが品物は届いていません。

GearBestは1日以内での質問返答を標榜していまして、以下はそんな私のGearBestの面白い文通の記録です。

----

息子の誕生日にそろそろPCでも買い与えようかと、安いPCを物色しているとGearBestで良さげなPCがあったので

ポチりました。息子の誕生日の2週ほど前です。

所が誕生日を過ぎ推定デリバリータイムになってもぜんぜん送付されませんので問い合わせをしました。

Subject:it's not shiped yet

Message:when I saw the website, it will ship at least 1/7. but it's not ship out yet.

when is it ship out?

返答:

Dear ***,

Thank you for placing your order on GearBest. Please check your order information below.

Remaining items(Not available currently):

Chuwi Lapbook Air CWI529 Notebook 28-Feb-19 Wait or Exchange

Tips for Suggested Options:

※. If you choose to Exchange, please send us the item link with the color and size or product model.

Due to the holidays season coming, it might slow down the outgoing process and the delivery of your order.We kindly ask for your patience regarding this.

2018年に注文したのに、2/28出荷で文句があるなら返金しろだって

そんなに急いでないので待つことにしました。

----

2/28過ぎても出荷されないので再度問い合わせしました。

Subject:注文が出荷されていない

Message:T*****で2019 2/28に出荷されると回答を得たのにまだ出荷されていない。

この注文は2018年に出荷される予定だった。

早く出荷してほしい。

Dear ***,

Thank you for contacting Gearbest.com. We are sorry for the inconvenience we may caused.

Below is your order information.

Remaining items(Not available currently):

Sku*quantity Product Name Estimated Dispatch Time Suggested Options*

* 1

Chuwi Lapbook Air CWI529 Notebook 7-15 business days Wait or Exchange

ええ・・・、2/28に出荷されるっつたのにまたの延期、もう信じられません。

でもまだ信じて受け入れます

-----

一週間後にメッセージを残します。

At 03/08/2019 08:39:14 CST Hey, Please tell me *true* dispatch time.

YOU CAN DISPATCH WITHIN 1 WEEK RIGHT?

返事がきました。

XXX様

ご連絡いただきありがとうございます。ご迷惑をおかけして申し訳ございません。

お客様の注文を今処理していますしかし、下記の商品現在在庫切れとなりましたのでご注意ください。

****1,Chuwi Lapbook Air CWI529 Notebook

この場合、2つの提案があります

案1:商品が利用可能になるまで少しお待ちください。

我々は20-30日間後に入荷予定です。出荷すると、納品の詳細をメールします。これはおおよその日付であり、率直に保証することはできません。

案2:選択した別の商品を交換します。

弊社は多くの素晴らしい製品を選び、お客様が交換品を見つけることができると確信しています選択したい製品リンクをお送りください。注文が更新されます

元の商品との価格差がある場合は、店舗クレジットとしてウォレットで払い戻しするか、差額をカバーする請求書をお送りします。

できるだけ早く商品を受け取るために、本日出荷される商品選択することをお勧めします。

この商品需要が高く、非常に競争力のある価格で、お客様がそれを楽しむことができると確信しているので、それを保つことをお勧めします。

注文を維持するために、出荷後に我々はお客様に次の注文のために使用することができる600ポイント報酬を与えますポイントについてさらに知りたい場合は、以下を参照してください。

http://www.gearbest.com/about/about-points.html

20日~30日遅延!?

あなた達は、今同じ製品を売っています

https://www.gearbest.com/laptops/pp_827413.html?wid=1433363

そのshippingは「Ship between: Mar 18 - Mar 20, Estimated Shipping Time: 5-9 business days

となっています

なぜ先に買った私より今のセールが先に出荷されますか?

その理由を教えて下さい。

私は2018年に注文しています

追記

xxx様

Gearbestにお問い合わせいただきありがとうございます

弊社のサイト掲載されている在庫在庫状況は、参照用です。

最も正確でタイムリーな情報提供するよう努めていますが、カート商品を追加した時点から注文を受け取った時点までに在庫状況が変わることがあります

少しお待ちいただけることを願っております

待たずに変更したくない場合は、払い戻しをすることができます

迷惑をかけて、诚に申し訳ございません。

参照用だそうです。

回答になっていません。

なぜ先に買った私より今のセールが先に出荷されますか?

その理由を教えて下さい。

と聞いています

と書いたけど、これ以上やり取りしても粘着になるだけだと思ったから返金した。

GearBestの高く売れた順に出荷ってのは、短期的には利潤を生むが

これを食らった消費者は安くともシップされないリスクのあるGearBestで購買する意欲は無くなるだろう。

この戦略は長期的に見れば悪手である

2019-01-31

Privacy Policy

FY Creation LLC. built the CLX for Craigslist app as a Free app. This APP is provided by FY Creation LLC at no cost and is intended for use as is.

This page is used to inform app visitors regarding our policies with the collection, use, and disclosure of Personal Information if anyone decided to use our App.

If you choose to use our App, then you agree to the collection and use of information in relation to this policy.

Information Collection and Use

When using the APP, it only collects anonymous usage information to operate, improve and personalize the products. The APP does not collect any Personally Identifiable Information (PII) about you, nor does it match collected anonymous usage data with any 3rd party PII information.

Log Data

We want to inform you that whenever you use our App, in a case of an error in the app we collect data and information (through third party products) on your phone called Log Data. This Log Data may include information such as your device Internet Protocol (“IP”) address, device name, operating system version, the configuration of the app when utilizing our App, the time and date of your use of the App, and other statistics. If you use our app to read or post information on our app, we don't collect any information about your identity. If you identify yourself by sending us an e-mail containing personal information, then the information collected will be solely used to respond to your message. In addition to other information described in this policy, we may collect and share precise location information including the presence of connected devices via bluetooth, through methods such as partner mobile “SDKs”. This information may be used by itself, aggregated, or combined with mobile identifiers (such as IDFAs and Android IDs), and shared with other parties, for purposes related to advertising, attribution (e.g., measuring ad performance), analytics and research. You can remove your consent to having your location data collected by changing the settings on your device (but certain services may lose functionality as a result). You can also control options through your device’s opt-out settings which will: (i) tell advertisers to not use your in-app information from that device to gather information about your interests to target interest-based ads and (ii) inform some partners to halt further data collection and sharing from that device.

Service Providers

We may employ third-party companies and individuals due to the following reasons:

To facilitate our App;

To provide the App on our behalf;

To perform App-related services; or

To assist us in analyzing how our App is used.

We want to inform users of this App that these third parties have access to your Personal Information. The reason is to perform the tasks assigned to them on our behalf. However, they are obligated not to disclose or use the information for any other purpose.

Security

We value your trust in providing us your Personal Information, thus we are striving to use commercially acceptable means of protecting it. But remember that no method of transmission over the internet, or method of electronic storage is 100% secure and reliable, and we cannot guarantee its absolute security.

Links to Other Apps or Websites

This App may contain links to other Apps or Websites. If you click on a third-party link, you will be directed to that app or website. Note that these external apps or sites are not operated by us. Therefore, we strongly advise you to review the Privacy Policy of these apps or websites. We have no control over and assume no responsibility for the content, privacy policies, or practices of any third-party apps or websites or services.

Changes to This Privacy Policy

We may update our Privacy Policy from time to time. Thus, you are advised to review this page periodically for any changes. We will notify you of any changes by posting the new Privacy Policy on this page. These changes are effective immediately after they are posted on this page.

Contact Us

If you have any questions or suggestions about our Privacy Policy, do not hesitate to contact us

This app has no affiliation with Craigslist. Craigslist is a registered trademark of Craigslist, Inc. Please visit Craigslist's privacy policy to better understand their data collection practices and controls that they make available to you.

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

こんな感じ

GetMessageの上にタイマーも扱える

MsgWaitForMultipleObjectsExを追加

GetMessageだとタイマーを処理できないのでPeekMessageに変更

>なぜかは ちょっと考えると面白い

Getとき必要なかった 終了処理を追加

msg.message == WM_QUIT

この部分 QUITメッセージが来たら終了する

obj == WAIT_TIMEOUT

タイマーを追加

y++で高さを変更してから

作画を呼ぶ

こんだけ

<が<

>が&GT

&が&

にかわっちゃってるので各自で置換してね

	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 {

			}
		}

anond:20190101172100

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

// WindowsProject7.cpp: アプリケーションエントリ ポイント定義します。
//

#include "stdafx.h"
#include "WindowsProject7.h"

#define MAX_LOADSTRING 100

// グローバル変数:
HINSTANCE hInst;                                // 現在インターフェイス
WCHAR szTitle[MAX_LOADSTRING];                  // タイトル バーテキスト
WCHAR szWindowClass[MAX_LOADSTRING];            // メイン ウィンドウ クラス名

// このコード モジュールに含まれ関数宣言転送します:
//ATOM                MyRegisterClass(HINSTANCE hInstance);
BOOL                InitInstance(HINSTANCE, int);
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);

#include <list>

class MyWindow;
	
std::list< MyWindow *> windows;

class MyWindow
{
public:

	HWND hWnd;



	MyWindow()
		:hWnd(NULL)
	{
		windows.push_back(this);
	}

	virtual ~MyWindow()
	{
		std::list< MyWindow *>::iterator it;
		for (it = windows.begin(); it != windows.end(); it++)
		{
			if (*it == this)
			{
				windows.erase(it);
				break;
			}
		}
	}

	static MyWindow * find(HWND key)
	{
		std::list< MyWindow *>::iterator it;
		for (it = windows.begin(); it != windows.end(); it++)
		{
			MyWindow *target = *it;

			if (target->hWnd == key)
			{
				return target;
			}

		}

		return NULL;
	}



	//
	//  関数: MyRegisterClass()
	//
	//  目的: ウィンドウ クラス登録します。
	//
	ATOM MyRegisterClass(HINSTANCE hInstance)
	{
		WNDCLASSEXW wcex;

		wcex.cbSize = sizeof(WNDCLASSEX);

		wcex.style = CS_HREDRAW | CS_VREDRAW;
		wcex.lpfnWndProc = WndProc;
		wcex.cbClsExtra = 0;
		wcex.cbWndExtra = 0;
		wcex.hInstance = hInstance;
		wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WINDOWSPROJECT7));
		wcex.hCursor = LoadCursor(nullptr, IDC_ARROW);
		wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
		wcex.lpszMenuName = MAKEINTRESOURCEW(IDC_WINDOWSPROJECT7);
		wcex.lpszClassName = szWindowClass;
		wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));

		return RegisterClassExW(&wcex);
	}

	//
	//   関数: InitInstance(HINSTANCE, int)
	//
	//   目的: インスタンス ハンドルを保存して、メイン ウィンドウ作成します。
	//
	//   コメント:
	//
	//        この関数で、グローバル変数インスタンス ハンドルを保存し、
	//        メイン プログラム ウィンドウ作成および表示します。
	//
	BOOL InitInstance()
	{
		hInst = hInstance; // グローバル変数インスタンス処理を格納します。

		ATOM c = MyRegisterClass(hInstance);
		y = 0;

		hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
			CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);

		if (!hWnd)
		{
			return FALSE;
		}

		return TRUE;
	}

	BOOL ShowWindow()
	{
		BOOL ret;
		ret = ::ShowWindow(hWnd, SW_SHOW);
		::UpdateWindow(hWnd);

		return ret;
	}


	HINSTANCE hInstance;
	MSG msg;
	BOOL run;
	int y;
	BOOL Main()
	{

		HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WINDOWSPROJECT7));
		run = true;
		int rc;
		// メイン メッセージ ループ:
		while (run)
		{
			DWORD obj = MsgWaitForMultipleObjectsEx(0, NULL,  100 , QS_PAINT| QS_ALLEVENTS,0);
			if (obj <= WAIT_OBJECT_0)
			{
				while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
				{
					if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
					{
						TranslateMessage(&msg);
						DispatchMessage(&msg);
					}
					if (msg.message == WM_QUIT) {
						run = FALSE;
					}
					if (msg.message == WM_CLOSE) {
						run = FALSE;
					}

				}
			}
			else if (obj == WAIT_TIMEOUT)
			{
				y++;
				PAINTSTRUCT ps;
				HDC hdc = BeginPaint(hWnd, &ps);
				this->OnPaint(ps);
				EndPaint(hWnd, &ps);
				::UpdateWindow(hWnd);
				RECT Rect2 = { 0,0,48,48 * 8 };
				InvalidateRect(hWnd, &Rect2, TRUE);
			}
			else if (obj == WAIT_FAILED)
			{
				rc = GetLastError();
			}
			else {

			}
		}


		return TRUE;

	}

	BOOL OnPaint(PAINTSTRUCT &ps)
	{
		HDC hdc = GetDC(hWnd);
		HBRUSH hBrush = CreateSolidBrush(RGB(48, 48, 246));
		RECT Rect = { 0,0,48,48 };
		Rect.top = 48 * y;
		Rect.bottom = 48 * (y+1);
		if (y > 8) {
			y = 0;
		}
		BOOL ret = FillRect(ps.hdc, &Rect, hBrush);
		DeleteObject(hBrush);

		return TRUE;
	}


};


int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
                     _In_opt_ HINSTANCE hPrevInstance,
                     _In_ LPWSTR    lpCmdLine,
                     _In_ int       nCmdShow)
{
    UNREFERENCED_PARAMETER(hPrevInstance);
    UNREFERENCED_PARAMETER(lpCmdLine);

    // TODO: ここにコードを挿入してください。

    // グローバル文字列初期化しています。
    LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    LoadStringW(hInstance, IDC_WINDOWSPROJECT7, szWindowClass, MAX_LOADSTRING);
    //MyRegisterClass(hInstance);



	MyWindow win;



	win.hInstance = hInstance;

	// アプリケーション初期化を実行します:
	if (!win.InitInstance())
	{
		return FALSE;
	}

	BOOL ret;

	win.ShowWindow();

	ret = win.Main();

	if (ret)
	{
		return 0;
	}else {
		return (int)win.msg.wParam;
	}



}






//
//  関数: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  目的:    メイン ウィンドウメッセージを処理します。
//
//  WM_COMMAND  - アプリケーション メニューの処理
//  WM_PAINT    - メイン ウィンドウの描画
//  WM_DESTROY  - 中止メッセージを表示して戻る
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_COMMAND:
        {
            int wmId = LOWORD(wParam);
            // 選択されたメニューの解析:
            switch (wmId)
            {
            case IDM_ABOUT:
                DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
                break;
            case IDM_EXIT:
                DestroyWindow(hWnd);
                break;
            default:
                return DefWindowProc(hWnd, message, wParam, lParam);
            }
        }
        break;
    case WM_PAINT:
        {
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hWnd, &ps);

			MyWindow *target = MyWindow::find(hWnd);
			target->OnPaint(ps);


            // TODO: HDC を使用する描画コードをここに追加してください...
            EndPaint(hWnd, &ps);
        }
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

// バージョン情報ボックスメッセージ ハンドラーです。
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    UNREFERENCED_PARAMETER(lParam);
    switch (message)
    {
    case WM_INITDIALOG:
        return (INT_PTR)TRUE;

    case WM_COMMAND:
        if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
        {
            EndDialog(hDlg, LOWORD(wParam));
            return (INT_PTR)TRUE;
        }
        break;
    }
    return (INT_PTR)FALSE;
}

anond:20190101162210

やすいように フルソー

青い■を表示するだけ

// WindowsProject7.cpp: アプリケーションエントリ ポイント定義します。
//

#include "stdafx.h"
#include "WindowsProject7.h"

#define MAX_LOADSTRING 100

// グローバル変数:
HINSTANCE hInst;                                // 現在インターフェイス
WCHAR szTitle[MAX_LOADSTRING];                  // タイトル バーテキスト
WCHAR szWindowClass[MAX_LOADSTRING];            // メイン ウィンドウ クラス名

// このコード モジュールに含まれ関数宣言転送します:
//ATOM                MyRegisterClass(HINSTANCE hInstance);
BOOL                InitInstance(HINSTANCE, int);
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);

#include <list>

class MyWindow;
	
std::list< MyWindow *> windows;

class MyWindow
{
public:

	HWND hWnd;



	MyWindow()
		:hWnd(NULL)
	{
		windows.push_back(this);
	}

	virtual ~MyWindow()
	{
		std::list< MyWindow *>::iterator it;
		for (it = windows.begin(); it != windows.end(); it++)
		{
			if (*it == this)
			{
				windows.erase(it);
				break;
			}
		}
	}

	static MyWindow * find(HWND key)
	{
		std::list< MyWindow *>::iterator it;
		for (it = windows.begin(); it != windows.end(); it++)
		{
			MyWindow *target = *it;

			if (target->hWnd == key)
			{
				return target;
			}

		}

		return NULL;
	}



	//
	//  関数: MyRegisterClass()
	//
	//  目的: ウィンドウ クラス登録します。
	//
	ATOM MyRegisterClass(HINSTANCE hInstance)
	{
		WNDCLASSEXW wcex;

		wcex.cbSize = sizeof(WNDCLASSEX);

		wcex.style = CS_HREDRAW | CS_VREDRAW;
		wcex.lpfnWndProc = WndProc;
		wcex.cbClsExtra = 0;
		wcex.cbWndExtra = 0;
		wcex.hInstance = hInstance;
		wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WINDOWSPROJECT7));
		wcex.hCursor = LoadCursor(nullptr, IDC_ARROW);
		wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
		wcex.lpszMenuName = MAKEINTRESOURCEW(IDC_WINDOWSPROJECT7);
		wcex.lpszClassName = szWindowClass;
		wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));

		return RegisterClassExW(&wcex);
	}

	//
	//   関数: InitInstance(HINSTANCE, int)
	//
	//   目的: インスタンス ハンドルを保存して、メイン ウィンドウ作成します。
	//
	//   コメント:
	//
	//        この関数で、グローバル変数インスタンス ハンドルを保存し、
	//        メイン プログラム ウィンドウ作成および表示します。
	//
	BOOL InitInstance()
	{
		hInst = hInstance; // グローバル変数インスタンス処理を格納します。

		ATOM c = MyRegisterClass(hInstance);


		hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
			CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);

		if (!hWnd)
		{
			return FALSE;
		}

		return TRUE;
	}

	BOOL ShowWindow()
	{
		BOOL ret;
		ret = ::ShowWindow(hWnd, SW_SHOW);
		::UpdateWindow(hWnd);

		return ret;
	}


	HINSTANCE hInstance;
	MSG msg;

	BOOL Main()
	{

		HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WINDOWSPROJECT7));

		// メイン メッセージ ループ:
		while (GetMessage(&msg, nullptr, 0, 0))
		{
			if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
			{
				TranslateMessage(&msg);
				DispatchMessage(&msg);
			}
		}


		return TRUE;

	}

	BOOL OnPaint(PAINTSTRUCT &ps)
	{
		HBRUSH hBrush = CreateSolidBrush(RGB(48, 48, 246));
		RECT Rect = { 0,0,48,48 };
		BOOL ret = FillRect(ps.hdc, &Rect, hBrush);
		DeleteObject(hBrush);

		return TRUE;
	}


};


int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
                     _In_opt_ HINSTANCE hPrevInstance,
                     _In_ LPWSTR    lpCmdLine,
                     _In_ int       nCmdShow)
{
    UNREFERENCED_PARAMETER(hPrevInstance);
    UNREFERENCED_PARAMETER(lpCmdLine);

    // TODO: ここにコードを挿入してください。

    // グローバル文字列初期化しています。
    LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    LoadStringW(hInstance, IDC_WINDOWSPROJECT7, szWindowClass, MAX_LOADSTRING);
    //MyRegisterClass(hInstance);



	MyWindow win;



	win.hInstance = hInstance;

	// アプリケーション初期化を実行します:
	if (!win.InitInstance())
	{
		return FALSE;
	}

	BOOL ret;

	win.ShowWindow();

	ret = win.Main();

	if (ret)
	{
		return 0;
	}else {
		return (int)win.msg.wParam;
	}



}






//
//  関数: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  目的:    メイン ウィンドウメッセージを処理します。
//
//  WM_COMMAND  - アプリケーション メニューの処理
//  WM_PAINT    - メイン ウィンドウの描画
//  WM_DESTROY  - 中止メッセージを表示して戻る
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_COMMAND:
        {
            int wmId = LOWORD(wParam);
            // 選択されたメニューの解析:
            switch (wmId)
            {
            case IDM_ABOUT:
                DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
                break;
            case IDM_EXIT:
                DestroyWindow(hWnd);
                break;
            default:
                return DefWindowProc(hWnd, message, wParam, lParam);
            }
        }
        break;
    case WM_PAINT:
        {
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hWnd, &ps);

			MyWindow *target = MyWindow::find(hWnd);
			target->OnPaint(ps);


            // TODO: HDC を使用する描画コードをここに追加してください...
            EndPaint(hWnd, &ps);
        }
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

// バージョン情報ボックスメッセージ ハンドラーです。
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    UNREFERENCED_PARAMETER(lParam);
    switch (message)
    {
    case WM_INITDIALOG:
        return (INT_PTR)TRUE;

    case WM_COMMAND:
        if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
        {
            EndDialog(hDlg, LOWORD(wParam));
            return (INT_PTR)TRUE;
        }
        break;
    }
    return (INT_PTR)FALSE;
}

anond:20181231104029

// WindowsProject7.cpp: アプリケーションエントリ ポイント定義します。
//

#include "stdafx.h"
#include "WindowsProject7.h"

#define MAX_LOADSTRING 100

// グローバル変数:
HINSTANCE hInst;                                // 現在インターフェイス
WCHAR szTitle[MAX_LOADSTRING];                  // タイトル バーテキスト
WCHAR szWindowClass[MAX_LOADSTRING];            // メイン ウィンドウ クラス名

// このコード モジュールに含まれ関数宣言転送します:
//ATOM                MyRegisterClass(HINSTANCE hInstance);
BOOL                InitInstance(HINSTANCE, int);
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);

#include <list>

class MyWindow;
	
std::list< MyWindow *> windows;

class MyWindow
{
public:

	HWND hWnd;



	MyWindow()
		:hWnd(NULL)
	{
		windows.push_back(this);
	}

	virtual ~MyWindow()
	{
		std::list< MyWindow *>::iterator it;
		for (it = windows.begin(); it != windows.end(); it++)
		{
			if (*it == this)
			{
				windows.erase(it);
				break;
			}
		}
	}

	static MyWindow * find(HWND key)
	{
		std::list< MyWindow *>::iterator it;
		for (it = windows.begin(); it != windows.end(); it++)
		{
			MyWindow *target = *it;

			if (target->hWnd == key)
			{
				return target;
			}

		}

		return NULL;
	}



	//
	//  関数: MyRegisterClass()
	//
	//  目的: ウィンドウ クラス登録します。
	//
	ATOM MyRegisterClass(HINSTANCE hInstance)
	{
		WNDCLASSEXW wcex;

		wcex.cbSize = sizeof(WNDCLASSEX);

		wcex.style = CS_HREDRAW | CS_VREDRAW;
		wcex.lpfnWndProc = WndProc;
		wcex.cbClsExtra = 0;
		wcex.cbWndExtra = 0;
		wcex.hInstance = hInstance;
		wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WINDOWSPROJECT7));
		wcex.hCursor = LoadCursor(nullptr, IDC_ARROW);
		wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
		wcex.lpszMenuName = MAKEINTRESOURCEW(IDC_WINDOWSPROJECT7);
		wcex.lpszClassName = szWindowClass;
		wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));

		return RegisterClassExW(&wcex);
	}

	//
	//   関数: InitInstance(HINSTANCE, int)
	//
	//   目的: インスタンス ハンドルを保存して、メイン ウィンドウ作成します。
	//
	//   コメント:
	//
	//        この関数で、グローバル変数インスタンス ハンドルを保存し、
	//        メイン プログラム ウィンドウ作成および表示します。
	//
	BOOL InitInstance()
	{
		hInst = hInstance; // グローバル変数インスタンス処理を格納します。

		ATOM c = MyRegisterClass(hInstance);


		hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
			CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);

		if (!hWnd)
		{
			return FALSE;
		}

		return TRUE;
	}

	BOOL ShowWindow()
	{
		BOOL ret;
		ret = ::ShowWindow(hWnd, SW_SHOW);
		::UpdateWindow(hWnd);

		return ret;
	}


	HINSTANCE hInstance;
	MSG msg;

	BOOL Main()
	{

		HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WINDOWSPROJECT7));

		// メイン メッセージ ループ:
		while (GetMessage(&msg, nullptr, 0, 0))
		{
			if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
			{
				TranslateMessage(&msg);
				DispatchMessage(&msg);
			}
		}


		return TRUE;

	}

	BOOL OnPaint()
	{
		return TRUE;
	}


};


int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
                     _In_opt_ HINSTANCE hPrevInstance,
                     _In_ LPWSTR    lpCmdLine,
                     _In_ int       nCmdShow)
{
    UNREFERENCED_PARAMETER(hPrevInstance);
    UNREFERENCED_PARAMETER(lpCmdLine);

    // TODO: ここにコードを挿入してください。

    // グローバル文字列初期化しています。
    LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    LoadStringW(hInstance, IDC_WINDOWSPROJECT7, szWindowClass, MAX_LOADSTRING);
    //MyRegisterClass(hInstance);



	MyWindow win;



	win.hInstance = hInstance;

	// アプリケーション初期化を実行します:
	if (!win.InitInstance())
	{
		return FALSE;
	}

	BOOL ret;

	win.ShowWindow();

	ret = win.Main();

	if (ret)
	{
		return 0;
	}else {
		return (int)win.msg.wParam;
	}



}






//
//  関数: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  目的:    メイン ウィンドウメッセージを処理します。
//
//  WM_COMMAND  - アプリケーション メニューの処理
//  WM_PAINT    - メイン ウィンドウの描画
//  WM_DESTROY  - 中止メッセージを表示して戻る
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_COMMAND:
        {
            int wmId = LOWORD(wParam);
            // 選択されたメニューの解析:
            switch (wmId)
            {
            case IDM_ABOUT:
                DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
                break;
            case IDM_EXIT:
                DestroyWindow(hWnd);
                break;
            default:
                return DefWindowProc(hWnd, message, wParam, lParam);
            }
        }
        break;
    case WM_PAINT:
        {
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hWnd, &ps);

			MyWindow *target = MyWindow::find(hWnd);
			target->OnPaint();


            // TODO: HDC を使用する描画コードをここに追加してください...
            EndPaint(hWnd, &ps);
        }
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

// バージョン情報ボックスメッセージ ハンドラーです。
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    UNREFERENCED_PARAMETER(lParam);
    switch (message)
    {
    case WM_INITDIALOG:
        return (INT_PTR)TRUE;

    case WM_COMMAND:
        if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
        {
            EndDialog(hDlg, LOWORD(wParam));
            return (INT_PTR)TRUE;
        }
        break;
    }
    return (INT_PTR)FALSE;
}


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

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

ブリッジ関数を書いた

2018-12-31

anond:20181228211250

// WindowsProject7.cpp: アプリケーションエントリ ポイント定義します。
//

#include "stdafx.h"
#include "WindowsProject7.h"

#define MAX_LOADSTRING 100

// グローバル変数:
HINSTANCE hInst;                                // 現在インターフェイス
WCHAR szTitle[MAX_LOADSTRING];                  // タイトル バーテキスト
WCHAR szWindowClass[MAX_LOADSTRING];            // メイン ウィンドウ クラス名

// このコード モジュールに含まれ関数宣言転送します:
//ATOM                MyRegisterClass(HINSTANCE hInstance);
BOOL                InitInstance(HINSTANCE, int);
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);


class MyWindow
{
public:

	HWND hWnd;

	MyWindow()
		:hWnd(NULL)
	{

	}


	//
	//  関数: MyRegisterClass()
	//
	//  目的: ウィンドウ クラス登録します。
	//
	ATOM MyRegisterClass(HINSTANCE hInstance)
	{
		WNDCLASSEXW wcex;

		wcex.cbSize = sizeof(WNDCLASSEX);

		wcex.style = CS_HREDRAW | CS_VREDRAW;
		wcex.lpfnWndProc = WndProc;
		wcex.cbClsExtra = 0;
		wcex.cbWndExtra = 0;
		wcex.hInstance = hInstance;
		wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WINDOWSPROJECT7));
		wcex.hCursor = LoadCursor(nullptr, IDC_ARROW);
		wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
		wcex.lpszMenuName = MAKEINTRESOURCEW(IDC_WINDOWSPROJECT7);
		wcex.lpszClassName = szWindowClass;
		wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));

		return RegisterClassExW(&wcex);
	}

	//
	//   関数: InitInstance(HINSTANCE, int)
	//
	//   目的: インスタンス ハンドルを保存して、メイン ウィンドウ作成します。
	//
	//   コメント:
	//
	//        この関数で、グローバル変数インスタンス ハンドルを保存し、
	//        メイン プログラム ウィンドウ作成および表示します。
	//
	BOOL InitInstance()
	{
		hInst = hInstance; // グローバル変数インスタンス処理を格納します。

		ATOM c = MyRegisterClass(hInstance);


		hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
			CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);

		if (!hWnd)
		{
			return FALSE;
		}

		return TRUE;
	}

	BOOL ShowWindow()
	{
		BOOL ret;
		ret = ::ShowWindow(hWnd, SW_SHOW);
		::UpdateWindow(hWnd);

		return ret;
	}


	HINSTANCE hInstance;
	MSG msg;

	BOOL Main()
	{

		HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WINDOWSPROJECT7));

		// メイン メッセージ ループ:
		while (GetMessage(&msg, nullptr, 0, 0))
		{
			if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
			{
				TranslateMessage(&msg);
				DispatchMessage(&msg);
			}
		}


		return TRUE;

	}



};


int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
                     _In_opt_ HINSTANCE hPrevInstance,
                     _In_ LPWSTR    lpCmdLine,
                     _In_ int       nCmdShow)
{
    UNREFERENCED_PARAMETER(hPrevInstance);
    UNREFERENCED_PARAMETER(lpCmdLine);

    // TODO: ここにコードを挿入してください。

    // グローバル文字列初期化しています。
    LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    LoadStringW(hInstance, IDC_WINDOWSPROJECT7, szWindowClass, MAX_LOADSTRING);
    //MyRegisterClass(hInstance);



	MyWindow win;



	win.hInstance = hInstance;

	// アプリケーション初期化を実行します:
	if (!win.InitInstance())
	{
		return FALSE;
	}

	BOOL ret;

	win.ShowWindow();

	ret = win.Main();

	if (ret)
	{
		return 0;
	}else {
		return (int)win.msg.wParam;
	}



}






//
//  関数: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  目的:    メイン ウィンドウメッセージを処理します。
//
//  WM_COMMAND  - アプリケーション メニューの処理
//  WM_PAINT    - メイン ウィンドウの描画
//  WM_DESTROY  - 中止メッセージを表示して戻る
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_COMMAND:
        {
            int wmId = LOWORD(wParam);
            // 選択されたメニューの解析:
            switch (wmId)
            {
            case IDM_ABOUT:
                DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
                break;
            case IDM_EXIT:
                DestroyWindow(hWnd);
                break;
            default:
                return DefWindowProc(hWnd, message, wParam, lParam);
            }
        }
        break;
    case WM_PAINT:
        {
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hWnd, &ps);
            // TODO: HDC を使用する描画コードをここに追加してください...
            EndPaint(hWnd, &ps);
        }
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

// バージョン情報ボックスメッセージ ハンドラーです。
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    UNREFERENCED_PARAMETER(lParam);
    switch (message)
    {
    case WM_INITDIALOG:
        return (INT_PTR)TRUE;

    case WM_COMMAND:
        if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
        {
            EndDialog(hDlg, LOWORD(wParam));
            return (INT_PTR)TRUE;
        }
        break;
    }
    return (INT_PTR)FALSE;
}

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

2018-12-23

anond:20181223152531

技としてはナイスだけど応用は厳しいよね

	const char *message = "        Hello world\n";

	for (int i = 0; i < 8; i++) {
		printf("%s", message + 8 - i);
	}

サンプルとしては、使いにくい書き方

ハローワールドループだけでも

結構遊べる

あなたは どんな 書き方が好き?

2018-08-24

anond:20180824112752

消せれば、綺麗なデザインのもあるし、面白いと思う。(ヘナとかは消せますよね)

身内の名前を彫るのは、「いつも一緒」みたいな固い意志表示なのかなーと思う。

https://www.elle.com/jp/culture/g244798/cfe-celebrity-tattoo-meanings15-0109/

単なるファッションじゃない! セレブタトゥーに込められたメッセージ

CULTURE SPECIAL

Message座右の銘?)を刻んでいる人が、多いんだなぁ。あるいはお守りみたいな?

2018-06-24

anond:20180624193421

「おまえだってー」って言ってる増田さんへの言及で書かないと全然わけわかんないですよ?

しろお知り合いならlineMessage喧嘩なさればよいのでは。

2018-04-08

読んだページを全部自動ブクマする

数日前に puppeteer で自動PDF にする試みを書いたブログホッテントリに入ってるのを見た

それに影響されて自動ブクマするもの作ってみた

bg.js

const username = ""
const api_key = ""

chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
	if(message.bookmark){
		bookmark(message.bookmark)
	}
})

async function bookmark(url){
	fetch("http://b.hatena.ne.jp/atom/post", {
		method: "POST",
		referrer: "no-referrer",
		headers: {
			Accept: "application/x.atom+xml, application/xml, text/xml, */*",
			"X-WSSE": await createCredential(),
		},
		body: `
			<entry xmlns="http://purl.org/atom/ns#">
				<link rel="related" type="text/html" href="${url}" />
			</entry>
		`.replace(/\t/g, ""),
	}).then(e => {console.log(e)})
}

async function createCredential(){
	const non = Math.random().toString(36).substr(2)
	const now = new Date().toISOString()
	const buf = new TextEncoder().encode(non + now + api_key)
	const u8a = new Uint8Array(await crypto.subtle.digest("SHA-1", buf))
	const str = Array.from(u8a, e => String.fromCharCode(e)).join("")
	const b64 = btoa(str)
	return `UsernameToken Username="${username}", PasswordDigest="${b64}", Nonce="${btoa(non)}", Created="${now}"`
}

username と api_key を埋めてバックグラウンドで動かす

page.js

chrome.runtime.sendMessage({
	bookmark: location.href
})

ページ内で動かすコード

URLバックグラウンドに投げる

今は全部投げるコードになってるが、必要に応じていらないドメインを弾いたりする

2018-03-09

anond:20180309014039

よっぽど仲良しでないとそんなの嫌。

というか、もし自分結婚するなら、依頼主の(結婚する人)呼ぶかな?と思ってみて、

呼びたくないなら、そんな人のお祝いMessageなんてしないですね。

あ、面倒だけど、私がする時この人にも列席してほしい、Message欲しい場合は、無理してでも頑張るけど。

2018-01-11

韓国の求める心から謝罪とは何か

日韓問題

最終的な解決がなされたのに蒸し返すことの契約的な是非はともかく、心情面で日本がどんだけ謝っても韓国納得しないじゃんって話については、2015年戦後70年首相談話の時にパックンが書いたコラムが興味深い。


首相談話についても、アメリカ人なので語りません

以下に一部引用する。

 謝るべきかどうかではなく、何故お詫びを求められ続けるかということだけについて話そう。

 まず挙げられるのは「各国の政府は、内政が厳しいとき反日感情煽り国民の怒りの矛先を外に向けさせる作戦を取る」という説明。これは間違いない。その作戦自体は間違っていると思うけどね。やりすぎてだんだん効果が薄れているみたいだし。

 でもそれだけではないだろう。もう1つの理由として、日本の「反省が伝わっていない可能性」も考えよう。もちろん、これまでに日本政府が謝ってきたのは事実。少なくとも村山首相中曽根首相細川首相小泉首相安倍首相謝罪している。

 しかし、各時代首相が謝っている傍らで、他の政治家たちによる謝罪とは反対の意に捉えられる発言が目立つ。有名な例だと、中曽根内閣時代藤尾正行文部大臣韓国併合についての「韓国側にも責任がある」発言竹下内閣時代奥野誠亮国土庁長官日中戦争についての「侵略意図は無かった」発言最近だと、「慰安婦制度必要だった」という橋本徹大阪府知事(当時)のコメントがある。

 行動も紛らわしく見える。5名の首相がおわびをしている一方で、靖国神社へ参拝している戦後首相は14名。国会議員では数百人に上る。靖国神社は、世界メディアWar Shrine戦争神社)と紹介されている。参拝される人の意図とは関係なく、世界が受ける印象は「お詫び」とは反するものになってしまう。

 今回も謝罪の意をこめた総理談話を発表した翌日に、67名の国会議員が参拝をした。安倍総理は参拝しなかったが玉串料を収めた。こういうことは英語でmixed messageという。その行動により、残念ながら「お詫び」が印象に残らない結果となる。

 その後、おおむね「謝罪した」とみられているドイツとの比較などが行われている。

 つまり日本政府や首脳は、公式声明では確かに何度も謝罪している。だが、公式声明以外の振舞いや、首脳以外の政治家言動に「本当はたいして悪いと思ってません」というホンネが感じられるため、本気で謝っていると思ってもらえないということである

 なので、どうすれば心から謝罪したと納得されるかというと、政治家(たぶん国民も)の大半の意見を「日本が悪かったです」ということで統一し、かつ大々的な声明だけでなくその他の場面でも日本が悪かったという態度を崩さず、あと政治家や元政治家靖国参拝奉納を止めるといったところだろう。

 少なくともパックン見立てではそのような感じだ。


 まあ確かに会社とか友人関係でも、いったんちゃんと頭は下げたものの、その後自分の席に戻って肩をすくめたりする姿が見られたら、本当は反省しておらずしぶしぶ形だけ謝ったのだ、という風に思われるだろうことはわかる。

 靖国は、誰がどの墓や神社に参拝しようが自由なのだがその自由なところから透けて見える気持ち反省のしてなさであるというのはなんか難しい所だ。

 結局のところ、大日本帝国とそれにまつわる物事ナチス第三帝国と同じくらいの扱いにしたら満足してもらえるはずってわけだろうが……。


このコラムへの読者の反応にパックンが返答している記事もあるのでそれも貼っておく。

アメリカ人だからか、語りきれなかったみたい

2017-11-24

ある声優に心底救われている話

何で唐突匿名に書こうかと思ったのかは解らない。

気持ち悪いだけの文章になっていますがそこはもうホントすみません

話せば長いんですけど、

友人が物凄くアイドルマスターSideMにハマっていて、お渡し会のためにBeitとハイジョのCDを6枚ずつ買ったのを貰ったときから全てが始まりました。

友人とは防衛部好きーで繋がっていたので声帯が決まった時に「あの子声優も出てるから!!!」と猛プッシュされたんです。

なし崩しに曲を聴いて。。。

あっ、スマイルエンゲージいいんじゃない?ってなって。。。

モバイル登録して。。。

その時は確かもふもふえんとカフェパレ婚活だったかしら。。ハイジョの水泳イベだったかしら。。。

まあそこでゆるゆるとしたプロデューサー活動をしていたんですよ。

3週に1回ログインするみたいな。

ピエール可愛いなって。今も思ってるけどね。好き。

そしてまあ10月になった時に私が異動になったんですよ。社内でも精鋭部隊が揃ってるバチクソ厳しいところ!

そこからあれよあれよと言う間に病みましてね。。。

いい子だと思ってた後輩にも「えっ?(笑)こんなことも出来ないんですか?(笑)」とか言われちゃう日々でした。

で、やべえぞもうそろそろ死ぬか?って本気で考え始めた時の朝、出勤してた時!

6時?とか7時なのにまあなんとTLがめちゃくちゃ賑やか。

すごい物販列の写メRTされておる。

なんぞこれ?となったらSideMの1stライブがこの日にある!と察して

まあ何故か行かないといけない気持ちになったんです。オタクによくある使命感ってやつです。

スマイルエンゲージと赤いやつ(当時は心の中でそう呼んでいました)(名前が覚えられません)しかまともに知らないのにね。

よく行こうとしたよね。

でも勿論現地はチケット無いし。じゃあどうする?となった時に会社の物凄く近くでライビュがある事を突き止めたんです。

異動する前だったらスーツ勤務だからちょろっと抜け出してチケット買って…て出来たけど

異動して固定の制服勤務になったのでもう抜け出すのは難しい。

でもチケット無くなったらどうしよう。

お昼休憩1時間の中、なんとか行けない?

からずっとそのチケットの事だけ考えるようになりました。

そして「お昼行っていいよ」と言われた時に…計画実行です。やってやりました!

ズボン制服のままで…

上は少しだけ脱いで大きいパーカー

ジャケット姿になり…(ここで10分経過)

片道15分の映画館に向かい

チケットを買って…

また15分かけて戻り…

と、まあなんともギリギリな中チケットを買って、適当な事を言って退勤して

(それまでそんな事した事なかったです。ごめんなさい上司 ありがとうフレックス勤務)

もうね、チケット買った後はこれから観れるライブの事しか考えていませんでした。

何か今の自分に物凄く衝撃を与えてくれるんじゃないかって。

アイマスは本当にそれまで未履修だったんですけども

キラキラしたものを見れるんじゃないかと!

そんな気持ちでいっぱいで、まあ色々と買ってギリギリめに映画館にいざ入ったら

私 以 外 オ ー ル ス タ ン デ ィ ン グ

えっ?!映画館だよここ?!

つの!?!?!?!?

プロデューサー洗礼を受けつつ…

(前から5列目くらいの隔離された場所だったのでたまに後ろを振り返りつつずっと座って見ていました)

ライブが始まった訳です。

DRIVE A LIVEだ…あっ、これ知ってる…

後ろの大声すごいな?!

とか思いつつ…まあ声優さん自己紹介していきますよね。

そうです。前述した通りの防衛部の梅原さんと白井さんしか存じない感じでした。

Beitとハイジョの人がああこんな感じなの?!とそういう風に見てました。

そして曲に行きましたよね。

2曲目「HIGH JUMP NO LIMIT

知ってるーーーーー!!!!!!!!!

いきなり知ってるの来たー!!!!!!!!

わかるわかる、これわかる。赤いやつだハイジョだ!白井さんいるもの

で、それが終わってさあ次は?次はなんぞ?となった時です。

∞Possibilitiesに出会ったのは!

それまで映画館椅子にまあ踏ん反り返る感じで座っていたのに

イントロから心を奪われ。

え?何や?何だよこれ?となり。

あぁピンク色だから宇宙人の人かしら?!

えっ?あの宇宙人ってこんな感じの人たちなの?!!?!?となり。

そして中央の一際キリッとした表情の人に釘付けになりました。

これは確かグレーの髪の人だ、何とか夫みたいな名前の子だ!と1人で興奮したのもいい思い出です。

私の両隣は2席ずつ空けて彼女に(無理矢理)連れて来られたであろう彼氏さんがいらっしゃったんですが、

その人たちももうノリノリになっている始末。

すごいぞこの人たち。何者なんだ。

そして彼らの歌う「可能性は無限大さ!」という言葉に心が奪われて。

そこからは一気に魅入られていきました。

で、自己紹介していた時には気付かなかったんですけど真ん中のお兄さん(仮)はずーっと役に徹底しているんですよ。

Study Equal Magic! でもね。

これすごい歌ですよね。高校の頃に出会っていたら私は多分今頃初の女性総理大臣になっていました。成人してから出会ったので残念ながら平社員です。

これ、物凄くノリノリになる歌であろうに、真ん中のお兄さん(仮)は眼鏡の人のイメージそのままに頷いてるだけなんですよ!

イメージそのままにってお前まともに知らないんじゃないの?って感じだけども何回か見たイラストイメージそのままなんですよ!解るか!?解るかい?!!?!?

…とまあこんな衝撃を受けてライブも終わった頃に、

その、役に徹してた真ん中のお兄さん(仮)が最後にフニャァと笑ったのを見て

まるでスタジオジブリキャラクターが如く髪の毛がブワっとなったのを感じていました。

…この人、何だ? なんなんだこの人!

終わって客電が付いて、劇場内には「お疲れ様でしたー」が行き交う中

もう真ん中のお兄さん(仮)含めた宇宙人グループの事だけ考えるようになっていました。

家に帰る途中色々調べ…

フムフム、真ん中のお兄さん(仮)は伊東健人さん。…おた恋の彼氏役か!とか情報収集しつつ…SideMのS.E.M関連を片っ端から開けて…

あぁ、こんな感じの人たちだったんだ!と新たな発見をして…

出来る分だけ解放したボイスを聞いてみて…ああ、道夫さん!となり…

伊東さんのサンプルボイスを聞いて…

全然声が違うのにビックリ。思ったより若いんやこの人。となりまして。

SideMを深く知るきっかけとなったのは勿論、役者さんという存在にずずハマりするきっかけともなりました。

それまで追っかけとかした事無かったんです。本当です。母親が好きなアーティストライブについて行って、握手会で「おぁっ、歌うまいっすね(笑)」って言うくらい。

そして月日は流れて、私も仕事が解るようになり…

地道に追っかけなどして…

で、もう一度壁にぶち当たる時が来ました。

今度は本当にやばいやつ。

ドクターストップ仕事も行けなくなってもうお先真っ暗、って時に硲さんのソロ曲が出たんですよ。

皆さまご存知 Learning Message

∞ PossibilitiesやStudy Equal Magicとは違って少し声のトーンが高め(曲が高いのかな)

ですがまあ何がおススメしたいかって、

伊東さんの声と歌詞!君の未来の輝き…からがグサグサささりまして、ええ。

深夜3時に不覚にも号泣しました。

仕事関係で3時半に起きなきゃいけなかったのに配信日の24から眠れなかったやつですね。

そして極め付けはつい最近あった銀河鉄道の夜朗読

すごく良かった。優しい大人やらせたらピカイチだと思います

そこでまあ色んな決心をしたんです。

死のうかなと思っていた私の人生が変わりました!!!

この人の芝居は兎に角

真摯にやってくれてるっていうのがビンビンに伝わって来るから大好きなんですよ!

まだまだ出始められたばかりだから勿論色んな話は聞きます。たまに私も思います

(でも多少の自己顕示欲と上昇志向が無いとやっていけない世界だと思うのよ!)

2回も死のうかなと思ったところを救われたらそりゃもう死ぬまで推すって決めるに決まってるじゃないですか!なぁ!!!

上に書いたのは硲道夫と銀河鉄道の夜だけだけど、見てきたもの全部に衝撃を受けました!

フスプも見たさ、やった吹き替えは全部探したし、NHKに問い合わせまでしてみたんだ!(世界街歩きだけが見つけられません)

所謂ただの声豚にはなりたくなかったかアプリゲームに出演が決まれ配信前だったら予めダウンロードして勉強して…

時には他の子にハマったりとかもして…

(ユバの徽というゲームです)

伊東さんを追っかけていると、

新たな発見毎日になっています

もうホント、愛してます!!!!!!!!!!!!

日々健やかに大切な人と元気にお過ごしください!!!!!!!そしてその素敵な芝居でどんどん色んな人を魅了させてください!!!!!!


なんて日々思いながら生きています

こんなんじゃラブレターじゃないか

ファンレターには書けないやつだな。


いやあの…今日朗読見てきたんです……明日も見れるんだ…エヘヘ…やったぜ…

ていう訳で寝ますおやすみ…エヘヘ…

2017-10-15

bitcointalkの説明

アクティティ説明過去情報コピペです)

ログイン時間書き込み数で上がり、アクテイビティ毎にランクが決まる(Activity = min(time * 14, posts))

  書き込み0:Brand new

  0 Activity: Newbie

  30 Activity: Jr. Member

  60 Activity: Member

  120 Activity: Full Member

  240 Activity: Sr. Member

  480 Activity: Hero Member

・2週間毎に最高14ずつ上がるらしい(でもなんか微妙に違うのかも。僕は14は飛ばし28までは一気に上がりました)

・僕は10月5日登録10月26日Jr.Member昇進になりました。3週間でした)

(詳細⇒ https://bitcointalk.org/index.php?topic=178608.0 誰か訳してください)

.

.

ランク説明

ランクがNewbieだと書き込みが6分に1回など制限があったり、PMを送っても届かなかったり、フリーエアドロップに参加できなかったりする

・だから基本的ランクを上げといた方が良い

しかし、私利のランク上げのために日本語スレスパムみたいに適当投稿するのは単純によくないことだと思う

・結局一番いいのは、単純に、真面目にスレに貢献し、参加することだと思う

(たまに書き込み削除の通知メールが来るが、それはたまによくあることなので、気を落とさなくていい)

(注意点として、以下に示すような投稿をするとBAN対象になると声明がありましたので、「スレ主がそういう投稿を求めている時」以外にこういう投稿をしないようにしたほうがいいです)

「joined」

「looking forward to getting X」

「signed up for X」

「applied」

日本語スレでも自分ツイッター宣伝したり露骨なアフィしたりすると消されます

(詳細: https://bitcointalk.org/index.php?topic=2284373.0

.

.

フリーエアドロップ説明(主に留意点)

情報が貼られる場所を紹介しま

.

1次情報(最新情報

ビットコイントークアルトコインアナウンス板」

https://bitcointalk.org/index.php?board=159.0

ビットコインガーデン:ギブアウェイ板」(ビットコイントークより規制が緩いため色々と留意

https://bitcoingarden.org/forum/index.php?board=2.0

.

2次情報用途は1次情報の取りこぼし用、時間無い人用、などとして)

「airdropalert」(一部アフィだが優秀なので書かざるを得ない)

https://airdropalert.com

ビットコイントーク日本語板」(もはやエアドロップ情報スレになってるため。アフィ目的スパムが多すぎて最近は見るのが心苦しい)

https://bitcointalk.org/index.php?topic=877.new#new

リファラつけた紹介アフィは規約違反なので基本消されます。最悪BANされます

.

・配布時期は気長にみたほうがいい(応募してすぐ配布されるわけではないものも多い。配布時期は各説明を読むしかない)

・scam対策のため、ウォレットダウンロード系は「安心なのだけやる」または「仮想環境作ってそこでやる」または「scamされてもいいマイニング専用PCでやる」

・scam対策のため、メールアドレスパスワード登録系は「パスワードは毎回別のを用意する」、「メールアドレスはできればサブのを使う」(要は「メールアドレスパスワードペア」が他の登録情報かぶらなければいい)

・たまにフリーエアドロップで「PMする」「肯定的ツイートして宣伝する」みたいな条件があるが、それは礼儀分別のあるPMでないと失格になることもあるっぽい(僕はRICHのフリーエアドロップで「Yes I wanna be rich!!」みたいなテンションの文とアドレス書いて送ったら、フリーエアドロップ受けられませんでした。あとSOARCOINの人が「ただRTしてるだけの人にエアドロップ配るか配らないかどうしたらいいかな?」という内容のアンケート取ってたりするので。外人とは言え、分別もった内容で応募しないといけないのかなと思いました)

・また、「send me personal message」「PMする」「PM」とかはパーソナルメッセージツイッターで言うDM)を送るということです。レス左側にある吹き出しマークを押せばPMを書くフォームに飛べますので、そこで書いて送信する、ということです

.

.

フリーエアドロップの際によくフォーム入力をせがまれる項目の説明

・「bitcointalk profile」は、自分プロフィールページの左側カラムにある「Forum Profile Information」に行った時のURLから、語尾の「;sa=forumProfile」を省いたもの

・「bitcointalk ID」は、上記「Forum Profile Information」に行った時のURLの中にある「u=なんたらかんたら」の複数桁の数字のこと

・「Address」は、ものによって違うが、基本的イーサリアムウォレットアドレスか、ウェーブスのウォレットアドレスか、または専用ウォレットアドレス基本的取引所アドレスでなく、どれもウォレットアドレス。例えばイーサリアムならMyEtherWalletなど)

.

.

■bitcointalk書き込み説明

スレに書き込むには、ページの右下や右上にある「reply」ってボタンを押せば書き込みフォームが出る

レスにアンカつけるには、レス右側にある「quote」ってボタン押せばアンカつき書き込みフォームが出る

適当書き込みをしたらたまにけっこう削除される(そして「削除したからな」ってメールが届く)

.

.

VM仮想マシン)の入れ方の例

・まず仮想マシンインストール https://pc-karuma.net/windows8-virtualbox-install/

・次に仮想マシンubuntuLinux一種インストール https://pc-karuma.net/windows-8-virtualbox-ubuntu-install/

(大体HDDの容量を10GBくらい取ります

2017-10-12

1996年以来の株価高値

株価20年ぶりに高値をつけたらしい。

ようやっと20年前の状況にもどったわけだ(少なくとも株価は)


1996年と言えば

ポケモンバイオハザードマリオ64パラッパペルソナクラッシュたまごっち

ドラゴンボールGT、エスカフローネ名探偵コナンナデシコ

Shall We ダンス?、インデペンデンスデイ、ザロックキッズリターン

アムラー援助交際、親父狩り、ジベタリアンプリクラ


1位 名もなき詩 Mr.Children 230.3万

2位 DEPARTURES globe 227.2万

3位 LA・LA・LA LOVE SONG 久保田利伸with NAOMI CAMPBELL 161.3万

4位 チェリー スピッツ 153.9万

5位 花-Memento-Mori- Mr.Children 153.9万

6位 空も飛べるはず スピッツ 143.2万

7位 愛の言霊~Spiritual Message サザンオールスターズ 138.1万

8位 I'm proud 華原朋美 137.2万

9位 Don't wanna cry 安室奈美恵 137.2万

10Chase the Chance 安室奈美恵 136.2万


なんだか楽しそうだなぁ・・・

安室奈美恵引退するし、マリオオデッセイは発売するし。

なんだか時代が変わっていくのを感じる。

ちょっとだけ期待して今日は筆を終えることにする。

バイバイ(´・ω・`)

2017-08-06

5 reasons why Japanese Engineer are fu*king da*n

  • Because they likes "Technical document" much, though they usually study with books even it's Front-end latest technology, Many of them are just translated original EN contents or da*n not sexy sample code, it's worthless in the world which dynamically changing day by day in few months. Regardless of free latest contents which can be found everywhere, they just get Secondary Information given by some evangelists with passive mindset, it causes making this Evangelist? market stable due to this kind of information gap structure.

See also : https://anond.hatelabo.jp/20170728223725

2017-04-30

http://anond.hatelabo.jp/20170429110724

Google翻訳

Although I am a college college student but recently I went to the test site of the Futamata River by the license renewal I was suddenly inverse of an Afro hair woman like Esperanza Spalding but my hair style was so beautiful but my face was so beautiful that I exchanged the tension and exchanged the line that day Although I broke up but the message arrived and it was invitation of the gong consomme so it got even more tension Soon after talking to the department's friends I gathered members and gathered at the private room pub in Ikebukuro yesterday Esperanza Spalding Because I got urgent, I joined up late, so I started drinking with men and women 3, for the time being, for the time being I started to drink 4 girls 3 and the situation of the three girls was obviously crazy and everyone's cute but the face is cute, but the behavior has been consistently suspicious and constantly dull Absolutely by moderation We are not trying to fit together what the matter These children are becoming uneasy but I come with pins at once so that they are all virgins and not quite accustomed to men so I think they are getting nervous so tense If that happens, the men are reincarnated again in the meaning that it is exciting but even if we struggle hard we can not relax their tensions, oh well, if you are confused with what you've done already Unexpected development One of three visited us to take out the booklet from the bag as a matter of fact and began to distribute it to our male team and it seems that if we look closely it is a group name that we have never heard of as an admission guide for emerging religion but we are staggering as to what I got to say that they started to recruit us seriously and spirited about the wonder of the cult and the greatness of the guru and the depth of history and the appreciation of the interests But all three of the girls changed their hands a little while ago and now we are relaxing and we have to stay silent for the time being silent as soon as we go into time like hell and fall apart suddenly the branch of the private room suddenly As the girls screamed at once with all the girls shouting "Guru-sama!" As they all looked at, look at them and wear a rag in the whole body and gods of Afrohair with a golden stick stand standing and see well with Esperanza Spalding While placing a nice smile on the placard, "There is a great success! Although it was all written as it was written as it was all It was a genuine thing seemed to be the entrance guidance of the cult but if it asked what you want to do is to cooperate with friends of the design major, The greetings and the history of the cult and so forth are written carefully and photographs and illustrations are abundantly used and the layout is also getting stuck. I thought that this wasteful energy pouring condition is usually thoughtful but usually they are beauty and theater theater circle Doing it and it seems to be an actor fellow there, just a while ago I came up with this fake religion Dokkari and looked for a target It seemed me that I was captured in the truth so it seems that three of my friends took care of the collaboration but since I was made a solicitude Girls who were suspiciously behaviorally suspicious because they got tension relaxed at once Espana spallding was also funky at the highest Espana Spalling was also funky so I was already enjoying it too much I drunk quite drinking I felt memory flew from the way I seemed to have collapsed apparently but when I woke up 4 men were at an internet cafe and everyone remembered too much I am not sure, girls are not found anywhere Even if I line it to Esperanza Spalding I will not be read Alright, while thinking that gossip with beauty students is dangerous, I wrote this in a private room of a net cafe now.

翻訳

私は大学生ですが、最近は二代目川の試験場に免許更新で行きました。私は突然エスペランサ・スパルディングのようなアフロ髪の女性とは逆でしたが、私の髪型はとても美しいですが、私の顔はとてもきれいでしたその日に緊張を交わしてその日のラインを交換しましたが、メッセージが届きましたが、それはゴングコンソムの招待で、もっと緊張しました。すぐに部署の友人と話した後、私はメンバーを集め、池袋プライベートルームパブに集まりました昨日エスペランサ・スパルディング緊急事態になったので、私は遅く入社したので、当分の間、私は男女3人で飲み始めました。私は4人の女の子3を飲み始めました.3人の女の子の状況は明らかに狂っていました。誰もがかわいいが、顔はかわいいですが、その行動は一貫して疑わしく、常に鈍いです。絶対に適度には私たちは一緒に取り組もうとしていません。不安ですが、私は一度にピンを持ってくるので、彼らはすべて処女であり、男性にはあまり慣れていないので、彼らは緊張していると思います。そのようなことが起きれば、男性は再び興奮するという意味で生まれ変わりますあなたがすでに行ったことと混同している場合は、緊張を緩和することはできません。予期せぬ開発3人のうち1人が、実際にバッグから小冊子を取り出して、男性に配布し始めました私たちが密接に見ると、それは新興宗教入学ガイドとしては聞いたことのないグループ名ですが、私たち真剣私たち募集し始めると言うことを驚かせていますカルトの偉大さと歴史の深さと利益尊重しかし、少女の3人はすべて少し前に手を変え、今はリラックスしているので、私たちは静かなまま静かにしなければならないすぐw地獄のように時間が掛かり、突然個室の枝が崩壊する突然、女の子たちが一瞬に叫んで「女達さま」と叫んだ。彼らが見ているように、それらを見て、全身にぼかしをかけ、アフロヘアの神々を金色の杖で立って立て、Esperanza Spaldingとよく会ってください。プラカードに素敵な笑顔を浮かべている間、「大成功です!それはすべて書かれたようにすべて書かれていました。それはカルトの入口指針と思われる本物のものでしたが、あなたがしたいことを尋ねるなら、デザイン専攻の友人と協力することです、挨拶歴史写真イラスト豊富に使われてレイアウトも詰まっているこの無駄エネルギー注ぎ込みは普通思慮深いと思っていましたが、通常は美しさと演劇劇場サークルですそこの俳優になってください、ちょっと前に、私はこの偽の宗教のDokkariを思いついて目標を探しました。私は真実に捕らえられたようでしたので、3人の友人が協力してくれたようです私は恋人となったので、疑わしい行動が疑わしい女の子たちは緊張感を緩和していたので、Españaも最高のファンキーであった。Spallingもファンキーだったので、私はすでにそれを楽しんでいた。私は明らかに崩壊したようでしたが、私が目を覚ましたときインターネットカフェに4人の男性がいて、みんながあまりにも多くを思い出していました。私はよく分からない、女の子はどこにも見られません。私はEsperanza Spaldingに行けても、美容師とのゴシップ危険だと思って、ネットカフェプライベートルームにこれを書きました。

2016-11-22

年間興行収入トップ20以内の漫画アニメ原作実写邦画

http://entamedata.web.fc2.com/movie/movie_j2016.html

2006

順位興行収入(億円)タイトル
5位71.0LIMIT OF LOVE 海猿
9位52.0デスノート the Last name
18位28.5デスノート 前編

2007

順位興行収入(億円)タイトル
7位45.6ALWAYS 続・三丁目の夕日
16位34.5どろろ

2008

順位興行収入(億円)タイトル
2位77.5花より男子ファイナル
1039.520世紀少年<第1章> 終わりの始まり
15位31.0L change the WorLd

2009

順位興行収入(億円)タイトル
1位85.5ROOKIES卒業
6位44.120世紀少年最終章ぼくらの
1234.8ごくせん THE MOVIE
16位31.4ヤッターマン
1730.2クローズZERO II
18位30.120世紀少年<第2章> 最後希望

2010

順位興行収入(億円)タイトル
5位80.4THE LAST MESSAGE 海猿
1141.0のだめカンタービレ 最終楽章 前編
13位37.2のだめカンタービレ 最終楽章 後編
2023.6ライアーゲーム ザ・ファイナルステージ

2011

順位興行収入(億円)タイトル
9位34.5GANTZ
14位28.2GANTZ PERFECT ANSWER

2012

順位興行収入(億円)タイトル
1位73.3BRAVE HEARTS 海猿
2位59.8テルマエ・ロマエ
1134.4ALWAYS 三丁目の夕日'64
14位31.3映画 怪物くん
16位30.1るろうに剣心
18位25.2僕等がいた 前篇

2013

2014

順位興行収入(億円)タイトル
5位52.2るろうに剣心 京都大火編
6位44.2テルマエ・ロマエII
7位43.5るろうに剣心 伝説最期
1724.7ホットロード
19位24.5ルパン三世
2021.9土竜(モグラ)の唄 潜入捜査官 REIJI

2015

順位興行収入(億円)タイトル
14位32.5進撃の巨人 ATTACK ON TITAN
18位27.7映画 暗殺教室

2016

順位興行収入(億円)タイトル
9位46.0信長協奏曲
13位35.0暗殺教室卒業編~
14位32.0orangeオレンジ
アーカイブ ヘルプ
ログイン ユーザー登録
ようこそ ゲスト さん