「eX.」を含む日記 RSS

はてなキーワード: eX.とは

2019-01-03

anond:20190103184241

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

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

#define MAX_LOADSTRING 100

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

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

#include <list>

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

class MyWindow
{
public:

	HWND hWnd;



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

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

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

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

		}

		return NULL;
	}



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

		wcex.cbSize = sizeof(WNDCLASSEX);

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

		return RegisterClassExW(&wcex);
	}

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

	int blocks[100][100];

	BOOL InitInstance()
	{
		hInst = hInstance; // グローバル変数インスタンス処理を格納します。

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

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

		for(int x = 0 ; x < 100 ; x++)
		{
			for (int y = 0; y < 100; y++)
			{
				blocks[y][x] = 0;
			}
		}

		if (!hWnd)
		{
			return FALSE;
		}

		return TRUE;
	}

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

		return ret;
	}


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

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

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

			}
		}


		return TRUE;

	}

	int boxType;

	BOOL WriteBoxOLDBox()
	{
		int width = 24;

		HDC hdc = GetDC(hWnd);
		HBRUSH hBrush = CreateSolidBrush(RGB(48, 48, 48));
		for (int y = 0; y < 30; y++)
		{
			for (int x = 0; x < 8; x++)
			{
				if (blocks[y][x] == 0)
				{
					continue;
				}

				RECT Rect = { 0,0,48,48 };
				BOOL ret;

				Rect.left = width * x + 1;
				Rect.right = width * (x + 1) - 1;
				Rect.top = width * y + 1;
				Rect.bottom = width * (y + 1) - 1;

				ret = FillRect(hdc, &Rect, hBrush);


			}
		}

		DeleteObject(hBrush);

		return FALSE;
	}


	BOOL WriteBox()
	{
		WriteBoxOLDBox();

		switch (boxType)
		{
		case 0:
			return WriteBoxI();
		case 1:
			return WriteBoxL();
		case 2:
			return WriteBoxZ();

		}

		return TRUE;
	}

	BOOL WriteBoxZ()
	{
		HDC hdc = GetDC(hWnd);
		HBRUSH hBrush = CreateSolidBrush(RGB(48, 48, 246));

		int width = 24;

		RECT Rect = { 0,0,48,48 };
		BOOL ret;

		Rect.left = width * x + 1;
		Rect.right = width * (x + 1) - 1;
		Rect.top = width * y + 1;
		Rect.bottom = width * (y + 1) - 1;

		ret = FillRect(hdc, &Rect, hBrush);


		Rect.top += width;
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);

		Rect.left += width;
		Rect.right += width;
		ret = FillRect(hdc, &Rect, hBrush);

		Rect.top += width;
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);


		DeleteObject(hBrush);

		return TRUE;
	}


	BOOL WriteBoxL()
	{
		HDC hdc = GetDC(hWnd);
		HBRUSH hBrush = CreateSolidBrush(RGB(48, 246 , 48));

		int width = 24;

		RECT Rect = { 0,0,48,48 };
		BOOL ret;

		Rect.left = width * x + 1;
		Rect.right = width * (x + 1) -1 ;
		Rect.top = width * y + 1;
		Rect.bottom = width * (y + 1) -1;

		ret = FillRect(hdc, &Rect, hBrush);


		Rect.top    += width; 
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);

		Rect.top += width;
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);

		Rect.left   += width;
		Rect.right  += width;
		ret = FillRect(hdc, &Rect, hBrush);

		DeleteObject(hBrush);

		return TRUE;
	}

	BOOL WriteBoxI()
	{
		HDC hdc = GetDC(hWnd);
		HBRUSH hBrush = CreateSolidBrush(RGB( 246 , 48 , 48));

		int width = 24;

		RECT Rect = { 0,0,48,48 };
		BOOL ret;

		Rect.left = width * x + 1;
		Rect.right = width * (x + 1) - 1;
		Rect.top = width * y + 1;
		Rect.bottom = width * (y + 1) - 1;

		ret = FillRect(hdc, &Rect, hBrush);


		//Rect.left   += width;
		//Rect.right  += width;
		Rect.top += width;
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);

		Rect.top += width;
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);

		Rect.top += width;
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);

		DeleteObject(hBrush);

		return TRUE;
	}

	BOOL SaveBoxI()
	{
		blocks[y  ][x] = 1;
		blocks[y+1][x] = 1;
		blocks[y+2][x] = 1;
		blocks[y+3][x] = 1;
		return TRUE;
	}


	BOOL OnPaint(PAINTSTRUCT &ps)
	{
		if (x > 8) {
			x = 0;
		}
		if (x <0) {
			x = 8;
		}
		if (y > 20) {
			switch (boxType)
			{
			case 0:
				SaveBoxI();
				break;
			case 1:
				break;
			case 2:
				break;
			}

			y = 0;
			boxType++;
			if (boxType > 2)
			{
				boxType = 0;
			}
		}

		this->WriteBox();

		return TRUE;
	}



	BOOL OnKey(WPARAM wParam)
	{
		if (wParam == VK_LEFT)
		{
			x++;
		}
		if (wParam == VK_RIGHT)
		{
			x--;
		}
		return TRUE;
	}


};


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

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

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



	MyWindow win;



	win.hInstance = hInstance;

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

	BOOL ret;

	win.ShowWindow();

	ret = win.Main();

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



}






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

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


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

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

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

anond:20190103170543

テトリス

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

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

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

 

WriteBoxLとWriteBoxIとWriteBoxZ

の違いをよく見比べて

自力で違いがわかれば

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

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

 

	BOOL WriteBox()
	{
		switch (boxType)
		{
		case 0:
			return WriteBoxI();
		case 1:
			return WriteBoxL();
		case 2:
			return WriteBoxZ();

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

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

#define MAX_LOADSTRING 100

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

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

#include <list>

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

class MyWindow
{
public:

	HWND hWnd;



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

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

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

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

		}

		return NULL;
	}



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

		wcex.cbSize = sizeof(WNDCLASSEX);

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

		return RegisterClassExW(&wcex);
	}

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

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

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

		if (!hWnd)
		{
			return FALSE;
		}

		return TRUE;
	}

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

		return ret;
	}


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

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

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

			}
		}


		return TRUE;

	}

	int boxType;

	BOOL WriteBox()
	{
		switch (boxType)
		{
		case 0:
			return WriteBoxI();
		case 1:
			return WriteBoxL();
		case 2:
			return WriteBoxZ();

		}
	}

	BOOL WriteBoxZ()
	{
		HDC hdc = GetDC(hWnd);
		HBRUSH hBrush = CreateSolidBrush(RGB(48, 48, 246));

		int width = 24;

		RECT Rect = { 0,0,48,48 };
		BOOL ret;

		Rect.left = width * x + 1;
		Rect.right = width * (x + 1) - 1;
		Rect.top = width * y + 1;
		Rect.bottom = width * (y + 1) - 1;

		ret = FillRect(hdc, &Rect, hBrush);


		Rect.top += width;
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);

		Rect.left += width;
		Rect.right += width;
		ret = FillRect(hdc, &Rect, hBrush);

		Rect.top += width;
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);


		DeleteObject(hBrush);

		return TRUE;
	}


	BOOL WriteBoxL()
	{
		HDC hdc = GetDC(hWnd);
		HBRUSH hBrush = CreateSolidBrush(RGB(48, 48, 246));

		int width = 24;

		RECT Rect = { 0,0,48,48 };
		BOOL ret;

		Rect.left = width * x + 1;
		Rect.right = width * (x + 1) -1 ;
		Rect.top = width * y + 1;
		Rect.bottom = width * (y + 1) -1;

		ret = FillRect(hdc, &Rect, hBrush);


		Rect.top    += width; 
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);

		Rect.top += width;
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);

		Rect.left   += width;
		Rect.right  += width;
		ret = FillRect(hdc, &Rect, hBrush);

		DeleteObject(hBrush);

		return TRUE;
	}

	BOOL WriteBoxI()
	{
		HDC hdc = GetDC(hWnd);
		HBRUSH hBrush = CreateSolidBrush(RGB(48, 48, 246));

		int width = 24;

		RECT Rect = { 0,0,48,48 };
		BOOL ret;

		Rect.left = width * x + 1;
		Rect.right = width * (x + 1) - 1;
		Rect.top = width * y + 1;
		Rect.bottom = width * (y + 1) - 1;

		ret = FillRect(hdc, &Rect, hBrush);


		//Rect.left   += width;
		//Rect.right  += width;
		Rect.top += width;
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);

		Rect.top += width;
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);

		Rect.top += width;
		Rect.bottom += width;
		ret = FillRect(hdc, &Rect, hBrush);

		DeleteObject(hBrush);

		return TRUE;
	}


	BOOL OnPaint(PAINTSTRUCT &ps)
	{
		if (x > 8) {
			x = 0;
		}
		if (x <0) {
			x = 8;
		}
		if (y > 8) {
			y = 0;
			boxType++;
			if (boxType > 2)
			{
				boxType = 0;
			}
		}

		this->WriteBox();

		return TRUE;
	}



	BOOL OnKey()
	{
		x++;
		return TRUE;
	}


};


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

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

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



	MyWindow win;



	win.hInstance = hInstance;

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

	BOOL ret;

	win.ShowWindow();

	ret = win.Main();

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



}






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

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


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

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

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

anond:20190101175055

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

第何回だろうな

キー入力を追加した

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

タイマー自動落下

 

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

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

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

#define MAX_LOADSTRING 100

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

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

#include <list>

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

class MyWindow
{
public:

	HWND hWnd;



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

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

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

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

		}

		return NULL;
	}



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

		wcex.cbSize = sizeof(WNDCLASSEX);

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

		return RegisterClassExW(&wcex);
	}

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

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

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

		if (!hWnd)
		{
			return FALSE;
		}

		return TRUE;
	}

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

		return ret;
	}


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

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

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

			}
		}


		return TRUE;

	}

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

		return TRUE;
	}

	BOOL OnKey()
	{
		x++;
		return TRUE;
	}


};


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

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

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



	MyWindow win;



	win.hInstance = hInstance;

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

	BOOL ret;

	win.ShowWindow();

	ret = win.Main();

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



}






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

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


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

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

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

2019-01-01

anond:20190101172100

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

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

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

#define MAX_LOADSTRING 100

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

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

#include <list>

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

class MyWindow
{
public:

	HWND hWnd;



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

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

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

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

		}

		return NULL;
	}



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

		wcex.cbSize = sizeof(WNDCLASSEX);

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

		return RegisterClassExW(&wcex);
	}

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

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

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

		if (!hWnd)
		{
			return FALSE;
		}

		return TRUE;
	}

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

		return ret;
	}


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

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

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

			}
		}


		return TRUE;

	}

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

		return TRUE;
	}


};


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

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

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



	MyWindow win;



	win.hInstance = hInstance;

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

	BOOL ret;

	win.ShowWindow();

	ret = win.Main();

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



}






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

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


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

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

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

anond:20190101162210

やすいように フルソー

青い■を表示するだけ

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

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

#define MAX_LOADSTRING 100

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

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

#include <list>

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

class MyWindow
{
public:

	HWND hWnd;



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

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

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

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

		}

		return NULL;
	}



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

		wcex.cbSize = sizeof(WNDCLASSEX);

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

		return RegisterClassExW(&wcex);
	}

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

		ATOM c = MyRegisterClass(hInstance);


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

		if (!hWnd)
		{
			return FALSE;
		}

		return TRUE;
	}

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

		return ret;
	}


	HINSTANCE hInstance;
	MSG msg;

	BOOL Main()
	{

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

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


		return TRUE;

	}

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

		return TRUE;
	}


};


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

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

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



	MyWindow win;



	win.hInstance = hInstance;

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

	BOOL ret;

	win.ShowWindow();

	ret = win.Main();

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



}






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

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


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

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

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

anond:20181231104029

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

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

#define MAX_LOADSTRING 100

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

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

#include <list>

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

class MyWindow
{
public:

	HWND hWnd;



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

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

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

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

		}

		return NULL;
	}



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

		wcex.cbSize = sizeof(WNDCLASSEX);

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

		return RegisterClassExW(&wcex);
	}

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

		ATOM c = MyRegisterClass(hInstance);


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

		if (!hWnd)
		{
			return FALSE;
		}

		return TRUE;
	}

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

		return ret;
	}


	HINSTANCE hInstance;
	MSG msg;

	BOOL Main()
	{

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

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


		return TRUE;

	}

	BOOL OnPaint()
	{
		return TRUE;
	}


};


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

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

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



	MyWindow win;



	win.hInstance = hInstance;

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

	BOOL ret;

	win.ShowWindow();

	ret = win.Main();

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



}






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

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


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

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

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


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

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

ブリッジ関数を書いた

2018-12-31

anond:20181228211250

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

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

#define MAX_LOADSTRING 100

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

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


class MyWindow
{
public:

	HWND hWnd;

	MyWindow()
		:hWnd(NULL)
	{

	}


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

		wcex.cbSize = sizeof(WNDCLASSEX);

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

		return RegisterClassExW(&wcex);
	}

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

		ATOM c = MyRegisterClass(hInstance);


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

		if (!hWnd)
		{
			return FALSE;
		}

		return TRUE;
	}

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

		return ret;
	}


	HINSTANCE hInstance;
	MSG msg;

	BOOL Main()
	{

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

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


		return TRUE;

	}



};


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

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

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



	MyWindow win;



	win.hInstance = hInstance;

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

	BOOL ret;

	win.ShowWindow();

	ret = win.Main();

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



}






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

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

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

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

2018-12-28

とりあえず、Visual Studioが作ってくれるテンプレ

//
//  関数: 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);
}

これ意味がわからない人が多いと思うけど

Windowマネージャーに 自分アプリ登録とかおもっておけばいい。

必須

とはいえ自動コード生成だから 問題がない

2018-07-30

100字超えたのでこっちで。

id:houjiT

お前(受け取り拒否見たの)初めてか?力抜けよ。

当方の主張は「左のいつもの手口」。であるから左の類似事例を挙げてるわけよ。受け取れないように受け取れないようにやって、相手のせいにするプロパガンダ、もういつもの手口ですわ。

過去アポなしで持ち込むと未来永劫その人はアポなしでやって戦略的に利用するとでも?違うでしょう。

「その人」じゃなくて、左系はそういう行動をしばしば(100%ではないぞ)とるよね、様式だよね、という話なわけ。で、様式であることを示すために、ちゃらっと調べて出てきたのを張ってるわけ。チョコの奴は記憶から曖昧だがね。どっかにいい無料ニュースアーカイバねぇかね。

今回通告してるし

んじゃ、今回の「抗議文」どうやって渡したんでしょうね。まず抗議集会の開始は、はい、「午後7時」。普通企業団体ならもうとっくに店じまいだわ。そんな時間判断がいるモノ受け取れるわけないでしょう。夜間警備の警備員しかいねぇんだから婚姻届ぐらいだわそんな時受け取るのは。ちなみにご本尊ツイッターだと渡し損ねて記念写真が午後8時ごろですわ。そりゃ絵図が当たってニッコニコエビス顔で記念写真も撮ろうってなるわな。

え、特級市民にして偉大なるLGBT様のためならカス自民党職員共は居残りでも残業でもしろと?そのために事前連絡しましたと? さすが特級市民の皆様、ブラックだねぇ、下々にはそんな発想できねぇね。その事前連絡いつよ?それ、リスケできるタイミングじゃないでしょ?

で、この行動のどこに、真摯相手方に文書を手交しようという意図があるの?

一方的電話で通告するのが真摯なの? 時間外に呼びつけるのが真摯なの? 衆の力を借りて暴力的に囲むことが真摯なの? 判断もできない現場警備員いじめ散らかすのが真摯なの? すげぇな、偉大なる領導であらせられるるLGBT様って奴は。

大体「連絡した」っつってるの、片側の主張じゃね?それ丸呑みして相手のせいだっての、すでにプロパガンダの丸のみなわけよ。

で、絵図かいてはめた連中がいろんなところで「我々の聖なる抗議文を極悪なジミンは拒否した!特級市民様の声を聴かないジミンを成敗せよ!」とかやる。低能支援者とか間抜けブクマカとかが「まあ自民党やっぱり感じ悪い!1!!」ってなる。そりゃお左さまにしてみりゃウハウハ、低能釣りのために飽きもせず繰り返しますわ。左Aがやれば左Bがぱくって、それと連帯する左Cがコピッて、その団体から崩れたやつが流れ着いた左Dでもチャレンジして・・・・ってやってるうちに行動様式として定着するわけよ。

ちなみに、例えば、じゃあ45分後におまえんちか、お前の関係先に抗議文渡すからちゃんと受け取れよ、罪状は無断IDコールによる心的外傷で謝罪と賠償要求するからな? と言ったらどうするんだよ?受け取るのか?得体も知れねぇ野郎(or尼orその他な有象無象)を近寄せようとするか?

以下追伸

http://b.hatena.ne.jp/entry/s/anond.hatelabo.jp/20180730024721

よくあることについてはご理解頂けたようで何より。

「片側」と言えど発信源は区議信頼性一定程度認められるべきでは

遺憾ながら左派はいいかなる時でも虚偽を言う事当然(ex.放射脳共が意図的にふりまくデマ国会におけるイラク外交官殺害米軍陰謀説を唱えた民主党)況やほかの状況においておや。

大体「通告」なるモノの内容時間はだれか公開してましたっけ?

それに党員が出ろとは言ってないよね?時間が遅いか最初から警備員に渡しててそこは問題にしてない。しかも最終的に受け取られたし

関係ない業者が受け取っていいものかどうかわからんのに押し付けようとする行為が是なんだ、ふーん。業者いじめやね。政治家なら、政治的文章の取り扱い位どうすべきか知ってるのにわざわざ末端が困るように行動して恥じないわけだ。さすが特級市民にして偉大なるLGBT様はちげぇね

さらに言えば

https://twitter.com/KamikawaAya/status/1022910260418207749

いないこと知っててやってるわけですよ? これでイノセントだって言い張るんだ。さすL

以下再追伸

http://b.hatena.ne.jp/entry/b.hatena.ne.jp/entry/s/anond.hatelabo.jp/20180730024721

公開され無くても自民が通告に抗議しない以上、常識的だったと理解すべきだ。警備員関係ないというが、受け取り自体業務内で行えて後に渡してるから自民から事前に話を回せばいいだけでは。

なんの証拠もなく、受け渡し側の言い分を丸呑みするという信仰告白であると受け止めますしかし、こちらはそのような宗教を信じているわけではないので、説得には全く寄与しない言説でした。なお、相手側に強弱はあれ負担を強いるのはすでにして失礼な行為では。

その他にご異存はないようなのでまとめると

という点で一致を見ることが出来、大変有意義ものでした。

以下再々追伸

http://b.hatena.ne.jp/entry/b.hatena.ne.jp/entry/b.hatena.ne.jp/entry/s/anond.hatelabo.jp/20180730024721

最後にという事なのでこちからはお呼び立て致しませんが為念

1、一方の言い分でも身元の明らかな議員根拠抜きに否定宗教未満の偏見

信じる根拠身分だけ、というのは些か前近代的は御発想で素晴らしい奴隷根性であると申し上げたいと思います。懐疑の心ってやつは"身内"に向かんもんですな。議員がどのようなウソをつくのか、まさかご存知ではありますまいに。

2、最初から警備員に渡す事で両者合意してるので、不誠実の根拠不明

合意していたら、そもそも騒ぎなぞにはならんでしょう。それほど

常識的だったと理解すべき

常識を振りかざすのであれば、人の留守中-就中夜分に-強訴をするような奴のどこが誠実なのでしょうねぇ

2018-06-24

A社運営の違法同人誌サイト

同人誌ならグレーだから訴えられない」「駿河屋で買って自社で裁断」 被害続く“違法同人誌サイト”、法人運営の悪質手口を関係者に聞いた (1/2)

http://nlab.itmedia.co.jp/nl/articles/1806/30/news002.html

増田情報とかもまとめて

同人あっぷっぷ

ttp://d-upp.com/

moemax

ttp://moemax.net

同人ラボ

ttp://doujin-labo.com/mainindex.php

BL同人801

ttp://bl-doujin801.com

ビーシェアリング

ttp://b-share.net

BLマガジン

ttp://blmagazine.net

バラ本舗

ttp://comic-doujin.com

ボーイズライブラリー

ttp://animoe123.com/bl/

どこでもどうじん

ttp://d-doujin.com

家畜まんこ

ttp://kachikumanko.black

鬼畜ちんこ

ttp://kichikuchinko.com

他にもあるのかも

同人ラボ鬼畜ちんこツイッターもあった

差別に関する利用規約を調べてみた

大雑把なまとめ

差別」や「ヘイト」などの表現が出てこないのは モバゲーNAVERniconicoYahoo!JAPAN ※すべて「他者権利侵害禁止」などの記載のみ

差別」の具体例が出てこないのは AbemaTVLivedoor小説家になろう

差別」の具体例が一番多いのが Facebookはてな11種 ☆はてな優秀!えらい!

ユニーク差別の具体例

Facebookの「移民ステータス」(移民の滞留資格のことでいいのかな?)

はてなの「収入

YouTubeの「従軍経験

メジャーサイト利用規約から差別に関する部分のみ抜粋ドメインアルファベット順)

対象にしたサイトはてなによく上がってきてコメント機能などがあるサイトをできるだけ網羅したつもりです。

URLがいっぱいあると投稿できないみたいなのでh抜きで書いてます

AbemaTV

ttps://abema.tv/about/terms

第8条(禁止事項)

(5)当社または第三者を不当に差別しまたは誹謗中傷する行為、当社または本サービス名誉・信用を毀損する行為

Ameba

ttp://helps.ameba.jp/rules/post_104.html

第13条(禁止事項)

4.本条第1項に定める禁止事項とは以下に定めるとおりとします。

(2) 他の会員や利用者、当社、その他第三者中傷したり、名誉を傷つけたりするもの権利侵害するもの

人種民族性別信条社会的身分居住地身体的特徴、病歴、教育財産等による差別につながる表現・内容の送信

Facebook

ttps://www.facebook.com/communitystandards/objectionable_content/

12. ヘイトスピーチ

Facebookが考えるヘイトスピーチとは、人種民族国籍信仰性的指向性別ジェンダー、性同一性、重度の病気や障がいなど、保護特性と呼ばれるもの理由に人々を直接攻撃することです。Facebookでは、移民ステータスに関する保護提供しています

GREE

ttps://pid.gree.net/?action=term_generic&page=terms_pc

9. 禁止行為について

(1) 反社会的行為

i. 民族人種性別・年齢等等による差別につながる表現掲載行為

はてな

ttp://www.hatena.ne.jp/rule/rule

第6条(禁止事項)

2. ユーザーは、本サービスを利用するに際し、以下のような社会的不適切行為を行ってはなりません。

b. 人種民族信条性別社会的身分居住場所身体的特徴、病歴、教育財産及び収入等を根拠にする差別表現行為

Livedoor

ttp://www.livedoor.com/rules/

1.4 禁止行為

1.4.1 禁止事由

3.他者差別もしくは誹謗中傷し、他者名誉もしくは信用を毀損侮辱し、もしくは業務妨害する行為、または、そのおそれのある行為

モバゲー

ttp://www.mbga.jp/www/kiyaku.html

第5条 モバゲー会員記述情報について

1.~前略~モバゲー会員は以下の情報記述することはできません。

d. 特許権実用新案権意匠権商標権著作権肖像権その他の他人権利侵害するもの

NAVER

ttps://help.naver.jp/rules/

第3条(禁止事項)

(2) 公の秩序または善良の風俗を害するおそれのある行為(過度に暴力的表現露骨性的表現、その他反社会的な内容を含み他人不快感を与える表現投稿掲載、公開、送信する行為などを含みます。)。

(3) 当社または第三者権利著作権商標権特許権等の知的財産権名誉権、プライバシー権、その他法令上または契約上の権利を広く含みます。)を侵害する行為

niconico

ttp://ex.nicovideo.jp/base/guideline

3.コンテンツによる表現の自由は無制限ではありません

他者権利侵害する行為

例)

他者名誉社会的信用、評判、プライバシー侵害する内容

他者基本的人権著作権等の知的財産権、その他の権利侵害する内容

note

ttps://note.mu/terms

8.禁止事項

差別につながる民族宗教人種性別・年齢等に関するもの

小説家になろう

ttps://syosetu.com/site/rule/

第14条 禁止事項

3. 当グループもしくは他者を不当に差別もしくは誹謗中傷し、他者への不当な差別助長し、又はその名誉もしくは信用を毀損する行為

Togetter

ttps://togetter.com/info/terms

第6条 禁止行為について

4. トゥギャッター若しくは第三者を不当に差別若しくは誹謗中傷し、又はトゥギャッター若しくは第三者の信用若しくは名誉プライバシー権パブリシティ権肖像権若しくはその他一切の権利侵害する行為若しくは侵害するおそれのある行為

7. 国籍民族人種社会的身分性別思想、信教、又は年齢等に関する差別的な表現一般ユーザーが感じ得る行為

Twitter

ttps://help.twitter.com/ja/rules-and-policies/twitter-rules

攻撃的な行為ヘイト行為

ヘイト行為: 人種民族出身地信仰している宗教性的指向性別、性同一性、年齢、障碍、深刻な疾患を理由とした他者への暴力行為脅迫嫌がらせ助長する投稿を禁じます

Yahoo! JAPAN

ttps://about.yahoo.co.jp/docs/info/terms/chapter1.html

第1章 総則

7. サービス利用にあたっての順守事項

(2) 社会規範公序良俗に反するものや、他人権利侵害し、または他人迷惑となるようなものを、投稿掲載、開示、提供または送信(以下これらを総称して「投稿など」といいます)したりする行為

YouTube

ttps://support.google.com/youtube/answer/2801939?hl=ja

悪意のある表現とは、次のような特性に基づいて個人集団に対する暴力助長したり差別扇動したりするようなコンテンツを指します。

人種または民族出自

宗教

身体障がい

性別

・年齢

従軍経験

性的指向性 / 性同一性

2018-06-15

anond:20180615145520

具体的に知りたいことがあるのなら「また来てもいい感じ?」とか聞きゃいいんじゃねーか

単なる会話の相槌にそこまで厳密なラインを引かない方が普通は会話は楽しいものだし。

逆に、なにがしか情報を取得したいのなら、取得したい情報ex.また来たいと思うぐらい良かったか)を取りやす言葉を投げかける方がよい。ただしその手の質問会話を多用すると、会話としての楽しみが減って尋問風味が感じられてあんまり楽しくないので注意。

2018-06-01

anond:20180601164816

実際には、こっから先は自分たちも美味しい思いができるわけじゃない、というのが、老化とともに身に迫ってきてるのが大きいんだろうなと思う。

若者向けのサービスやりたいんだけどと相談をされて、そんな市場はありませんよ?だって~~だから(ex.子育て世代にそんなヒマ&金あるかいな、あなた方がボリュームがあると思い込んでいる団塊Jr.世代はもう中年だし金もない など)をデータと共に説明すると、なんていうか、ピリピリっとする。

んで、大抵は若者ターゲットにすることを諦めて、バブル世代以上をターゲットに据えて「親子二代で!」とかお茶を濁したりすることが多い。

まぁでも全員ではないけどね。

こないだ会った人は50代半ばだったけど、まさに「若者向けのつもりで企画したけど市場がないかシニア向けに切り替えようか」という会議で、初めて説明を遮って「年寄り共が手をこまねいてるからこんな辛気臭い話ばっかりになるんだよ!」って怒ってて、まともなバランス感覚のある人も居るんだなぁ、とは思ったけど。あとで聞いたら出来るけどかなり変わり者だって話だったので、まぁ少数派ではあるんだろうなぁ。

2018-05-26

若手男性アイドル知名度低すぎ問題

 女子ドルは細かいことはわからないけどグループ名だけは知ってる、って場合結構あるのですが(ex.仮面女子東京女子流夢見るアドレセンス)、男子アイドル知名度がほぼありません。

 なぜだ。よく言われているジャニーズテレビ支配のせいなのか。それとも女子ドルには女性ファンもつくけど男子ドルにはまず男性ファンがつかないせいか

 その辺の事情はわかりませんが、せっかくなので知ってる限りの近年デビューした知名度が低い男性アイドルを紹介します。

 こないだ話題になっていた特典会でベタベタする地下男アイドルみたいなのだけが男性アイドルではないですからね! 『男性ファンと違って女性ファン過激ものを求める』ってコメントを見て驚愕したんですよ私は! そんなわけあるか! しかしこんなとんちんかん意見が出てくるのも超トップ知名度ジャニーズと超過激地下ドルしか知られてないせいだと思うので、ぜひ若手で頑張ってるレベルの高い子たちをご覧ください。

King&Prince

https://www.youtube.com/watch?v=j9dHcSlVL4c

 ちょっと前に書いたので詳細はそちらで。

https://anond.hatelabo.jp/20180322225112

 ジャニーズですがデビューしたてということで一応入れました。

 総合的に大変完成されたアイドルです。

 ただ惜しむらくは、キャラマジでいいんですけど、激しく踊りながら歌える人がいないっぽい……。

 デビュー曲の披露、完全被せだったり岸くんだけ生歌だったり平野くんだけ生歌だったりと様々なバージョンがありましたが、緊張してるのを差し引いても見ててハラハラしてしまう。

 本人たちの言う『世界を目指す』を真に受けてる者としてはもうちょっと頑張ってほしいです。

battle boys

https://www.youtube.com/watch?v=rx7_YMMCxKw

 スタダのアイドル流動的過ぎてよくわからない!

 この子達固定グループじゃないらしいんですが、CD出すからにはデビュー扱いでいいですよね?

 ご覧のとおり歌もダンスも上手いし飾り気がない少年っぽさがかっこいいです。

●祭nine

https://www.youtube.com/watch?v=85te9TMwteY

 踊りながら歌いながらアクロもする滅茶苦茶タフな人たち。事務所鬼のようリリースイベントを組むのでこれ踊ったときにはかなり疲弊してたはず……。そのわりには大変クオリティが高いです。恐ろしいことに生歌なんですよ。

 赤・紫・黄色の子特に歌が上手くてこの曲では彼らしか歌ってませんが、ほかの曲は全員参加します。

 

●ANTIME

https://www.youtube.com/watch?v=eKhlNQe8qDs

 メンバー三人が元ジャニーズジュニアジュニア時代からわりと人気のある子たちだったので最初から一定ファンがいました。

 落ち着いて聴ける『いい曲』をよく出していますが、ダンスもできる方なのでわりと動きます

●XOX

https://www.youtube.com/watch?v=jsYTtgVaFq8

 読者モデル出身で結成。ひたすらお洒落さとメンバーの顔の良さを堪能するグループ

 歌とダンスは期待してはいけない。ファンの方によると上達してはいるらしいんですが、いいんです、そこが目玉ではないので。

 最近中心だったとまんくんが抜けて雰囲気が若干変わりました。新加入の二人もモデルの子


 多少なりとも知っているグループはこのぐらいでした。

 あとはスタダのSUPER★DRAGONとかLINEオーディションで勝ち上がったFlowbackとか、いろいろほかにもいるんですけどコメントつけられるほど詳しくないので控えます

 そして力の入れ方に差はあるにせよ皆さん特典会どんどんやってらっしゃいます個人的にはアイドル偶像でいてくれれば満足なので接触はそんなに求めてないんですが、一番手っ取り早くファンを獲得できる手法であることは確かなんですよね。当然事務所ちゃんとしてるところは、握手トーク・ツーショ以上のことはさせません。

 もうそれなりに知名度あるなと思った超特急DISH//m!lkは抜きました。m!lkは正直微妙なとこだったんですけど、佐野くん最近俳優活躍してるから広がってるかなって。

 男性アイドルも魅力的な人沢山いるから、みんながんがん推しみつけてこーね!

2018-05-17

3大インド人発見発明したモノって。

やっぱり、インド人凄いな。

今、日本流行っているモノばかりだ。

2018-05-05

はてなB層といえばいいのか

はてブの人気コメントがひどい。いやサービス当初からひどいけど、最近は読むに耐えない内容のものが多すぎる。


昔 (2012年) の人気コメント

2012年くらいまではまだよかったと思う。支持政党思想に偏る事なく(ないとは言わないが)、記事に対して要旨をまとめていたりきちんとした反駁をしているものが人気コメントに上がってきていた。

はてなブックマーク - 「ルーピー鳩山に怒り心頭だったオバマ大統領 アジア政策を支えた側近の回顧で明らかに (2012/03/21)
http://b.hatena.ne.jp/entry/jbpress.ismedia.jp/articles/-/34803

  • 筆者をみて眉に唾を。もしアメリカを怒らせたなら、それって結構すごいことではないかと。
  • あんな男が首相をやっていた、ということが今だに信じられないよ

当時不人気であった鳩山首相記事なのでさぞ同意コメントが、と思いきや「この記事おかしい」「筆者がおかしい」「記事を読んでの意見」とかもきちんと上がってきている。

こういう状態だと、それぞれの立場から意見があり公平な視点で読むことがしやすい。

(賛成、反対の意見があった上で自分はどちらなのかまた第三の意見なのかという発想ができる)


最近の人気コメント

はてなブックマーク - 麻生財務相セクハラ罪という罪はない、殺人とは違う」:朝日新聞デジタル (2018年5月4日)
http://b.hatena.ne.jp/entry/s/www.asahi.com/articles/ASL547FDDL54ULFA00P.html

  • こういう奴を辞めさせようともしないんだからそりゃ衰退するよ

麻生氏はメディアブーストも相まっての失言メーカーである事は昔から知られているし、こういう意見も出るのは納得できる。
メディア発言しない方がいい人なんだけど、マイクを向けられちゃうんだろうな)


しかし、

こういうコメント最近上がってこない。(「全てのコメントから探してみるとある


ネトウヨネトサヨ意見に流されるB層になってしまっていないか

上記の 2 ページを見比べてもらえれば分かりますが、2012年当時と今ではブコメ数もスター数もかなり増加しています

昨今の TwitterFacebook などの SNS の影響により気軽にスターをつけたりコメントを書いたりする敷居が下がったのかなと思います。(スマホリアクションする人も当時と比べると相当に増えたんだろうな)


人が多ければ集まるリアクションコメントも多いし大衆化するのは仕方がない事ではあるのですが、もう少しどうにか、はてブシステム的な解決でもよいですし、スターコメントをつける方々に良識を持ってアクションしてもらいたいなと思います

ex. スターコメントをつけるその文章を、口に出して家族友人や学友同僚に言える意見なのかどうか。)


知性なきスターコメントあなたの知性をも下げかねないんじゃないかなと思います。お気をつけください。


また、自分が平常であるかどうかも気にした方が良いと思います2012年当時の自身ネトウヨ活動を自省した記事がありましたので引用しておきます

[雑記]かつてネトウヨであった「私」から、今ネトウヨであるあなた」への手紙 (2012-05-26)
https://megalodon.jp/2012-0608-0033-45/d.hatena.ne.jp/akio71/20120526/p1
http://b.hatena.ne.jp/entry/d.hatena.ne.jp/akio71/20120526/p1

自分と直接、関係のない人間


自分家族でもなければ、隣人でもない人間を、一方的侮蔑し、罵倒し、悪いことが起きれば彼等のせいにし、良い人間は「彼等ではない、自分達の同胞であるとする。


日本人」「親日」という、広すぎるくくりで、成果をあげた人間を褒め称え、自分達はなにも努力をせずに、自尊心を満たせること。

いっけん、まっとうに見えるニュースの裏を陰謀論で読み解き、「一足はやく真実に気付いた私達」同士で、悦にいること。

1999年も、2000年も何事もなく過ごしたくせをして、「いずれ来る、反日勢力による危機」という未来に楽しく怯え、「選ばれた私達の手によって、その危機回避できるのだ」「選ばれた私達だけが、その危機に備えられるのだ」と誇ること。


ネトウヨとは、なんとも楽しく、誇らしく、胸のすく、「溜飲の下がる」遊びでした。



これは、私の、ごく個人的事情ですが、ネトウヨだった頃の私は、職場で大きなストレスを抱えていました。


仕事場だけではなく、家庭内にも問題がありました。

ストレスの源をどうにかする方法は「会社を辞める」か「家を出る」しか、当時の私には思いつかず、ネトウヨとして誰か、自分とは縁もゆかりもないがゆえに、完全に自分正義の側に立てる相手を、あげつらい、笑い、糾弾し、いずれ彼等は滅びるのだと信じ、実際には自分の味方などしてもくれないような相手を「日本人」で「愛国」で「親日」だから信頼できるとすがり、どうにもできない自分の状況のかわりに、わかりやすい異国の弱者を助けたいと、思い上がっていました。


熱狂現実逃避ネット上だけの仲間。


ネトウヨであることに、当時、私は酩酊していた、と思います

2018-04-29

昔、dankogaiという人がいた

もう、老人会くらいの人か覚えてないと思うけど、昔dankogaiという人がいたんですよ。

perlハッカーでね、Encode.pm作ったりして貢献されていたんですよ。

すごく本を読むのが早くて、頭がいいもんで、書評ブログを書いていたんですよ。結果、最初の有名ブロガー(アルファブロガー)になったんですよ。

当然perlハッカーからperlソースを書かれてたんですけど、読みづらくてねぇ。perl = 読みづらいを加速させてくれたんじゃないかと思いますよ。

(ex. http://blog.livedoor.jp/dankogai/archives/50502585.html)

人気ブログだったので本とかも出されてね、2000年代インターネット重要人物だったんですよ。

毎日のようにホットエントリしてたくらいだから

それから、4、5年くらい前かなぁ?Twitterの波がグワーって来た頃から更新が減りましてTwitterにすっかり移っちゃったんですな。

さっきみたら去年の7月更新最後だったんですな。内容を見たらVALUリードエンジニアになったとの記事ですね。

サイト行って確認するまでなんのサービスだったかも忘れていました。

まぁ、そんなdankogaiさんなんですけどね、最近はおなじアルファブロガー池田ノビー先生同様、信者商売をされているようでしてニコニコ動画自分チャンネルをやっておられるようです。

さて、そんなdanさんなんですが、結構政権批判ツイートいいねしておりまして、別に個人思想なんて自由だとは思うのですが、「dan kogaiさんはこのツイートいいねしました」で入ってくるもんで、へぇそうなんだと思い、増田らせていただきました。

もう2018年なんですなぁ。

2018-04-06

anond:20180406143226

動物園みたくガラス張りになってて中が見えるアレかな?

それはそうとここ見てみたら?

ttp://www.kokusen.go.jp/ncac_index.html

国民生活センター

2018-04-04

沈黙は金

あるものに対する感想を抱く(ex. きのこの山うまいな~)

その感想対立する意見にも理があると思う(ex. まあたけのこの里もいいところがある)

俯瞰してみた場合どちらが妥当か考える(ex. 1個当たりチョコの量で考えたら、やはりきのこの山がお得ではないか

その俯瞰した視点そもそも偏っていることを自覚する(ex. チョコの量が多ければ良いとは限らない)

もう黙っているのが無難でないかと考えるが、それも無責任かもしれないと思う(ex.陣営からハブられてしまうかも…)

結局当たり障りがないことしか言えない(ex.どっちもそれぞれに美味しいよ)

 

 

最終的にはただ「何かを言いました」というアリバイを作るだけのことに、いちいちこのくらい考えるのしんどい。

喋らなくても平和に生きていけるようになりたい。

2018-02-18

昨今のアイドルソング

僕はアイドルオタクなのだが、、、

昨今のアイドルソング一般ピープルの思い描くような「童貞肯定し、彼らの妄想を膨らませる曲」が著しく減っていると感じる。

アイドル戦国時代終焉を迎え、アイドル混沌時代の今。ザ・制服!のようなグループはとても少ない。それぞれのグループがコンセプト(ex.ラップ祭り釣りneoetc...)を持って活動している。何でもあり。

からこそ!

一般ピープルも「アイドル」というだけで毛嫌いせず曲を聴いてほしい。ライブにも時間が合えば来てほしい!

地上の48G、ハロプロ系、スタダとかでも、地下のわけわからんグループでもいい。正直、どのグループでもいいから、曲を聴いて欲しい。どこかにあなたの好きな雰囲気の曲をやっているグループがあるから

youtubeとかで聞いて。

かにアイドルオタクには、気持ち悪い人も頭のおかしな人も日本語が通じない人もいる、だからといってアイドルソングを無下にしないで欲しい。

かに最近アイドルの中には、自己顕示欲の塊でスキルもないかわいくもないくせにワァーキャーされてイケメンとパコりたいだけの人もいる、だからといってアイドルソングまで下劣ものとして見ないで欲しい。

歌はすごいから。

今の技術音源であれば上手い下手とか無いから。

色々聞いてみて下さい。

2018-02-01

anond:20180201220014

描きたいものに対しての対症療法だけでいい。

ex.虫がもっと上手く描きたい→虫の図鑑画集を買う。実物を見に行く。

何かを描きたいのに描けなくて困る時がいつか来るから、その時に助けてあげられればいい。

2018-01-18

anond:20180118220912

やってないならやってみたいらいいかも>書き出す

あとはなんだろう、健康沼に落ちて健康カッパになってみるとか?

ex.ライフログとってひたすら健康パラメータを上げる

2018-01-17

独り言が多い

中学の頃、会話が苦手なのをどうにかしようとして誰かと話す前にシャドー会話して日常であった事を面白く話せるように練習してた。(実際に声に出して独り言。)

こんな事してたせいかシャドー相手自分にして一人で会話できるようになってた。

ex.

俺1「この前さぁ〜〜だったんだよねぇ」

俺2「あ〜わかるわ〜、まぁあれは〜じゃないかなぁ」

(声に出して楽しそうに独り言。)

相当ヤバイ奴みたいだけど、正直やってみると面白い。一人でいるとき寂しさが紛れる。色々悩んでるとき自分自身相談すると解決したりする。

21歳だけど、こんなのしてるやつ他にもいんのかなぁ

2017-10-20

https://anond.hatelabo.jp/20171020102206

話題自体寂れているっていうのはよくわからなかったけど、互助会っぽいコメントには

ex. いいですね!参考になります! のみのやつ)

大抵主から★みっつついているんだけど、あれって掟のようなものがあるのかな?って思ったのです。

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