亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? win.cpp

?? Windows 圖形編程 書籍
?? CPP
字號:
//-----------------------------------------------------------------------------------//
//              Windows Graphics Programming: Win32 GDI and DirectDraw               //
//                             ISBN  0-13-086985-6                                   //
//                                                                                   //
//  Written            by  Yuan, Feng                             www.fengyuan.com   //
//  Copyright (c) 2000 by  Hewlett-Packard Company                www.hp.com         //
//  Published          by  Prentice Hall PTR, Prentice-Hall, Inc. www.phptr.com      //
//                                                                                   //
//  FileName   : win.cpp						                                     //
//  Description: Generic Window Class                                                //
//  Version    : 1.00.000, May 31, 2000                                              //
//-----------------------------------------------------------------------------------//

#define STRICT
#define WIN32_LEAN_AND_MEAN

#include <windows.h>
#include <assert.h>
#include <tchar.h>
#include ".\win.h"


// Default message handler for main program window, dispatch to OnKeyDown, OnDraw, etc.
LRESULT KWindow::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	switch( uMsg )
	{
		case WM_KEYDOWN:
			OnKeyDown(wParam, lParam);
			return 0;

		case WM_PAINT:
        {
            PAINTSTRUCT ps; 
                
            BeginPaint(m_hWnd, &ps);
            OnDraw(ps.hdc);
            EndPaint(m_hWnd, &ps);
        }
        return 0;

		case WM_PALETTEISCHANGING: // should not happen
			MessageBox(NULL, _T("Hello"), _T("Hi"), MB_OK);
			return 0;

		case WM_PALETTECHANGED:
			return OnPaletteChanged(hWnd, wParam);

		case WM_QUERYNEWPALETTE:
			return OnQueryNewPalette();

		case WM_DESTROY:
			if ( m_bMainWindow )
				PostQuitMessage(0); // main window only
			return 0;
	}

   return DefWindowProc(hWnd, uMsg, wParam, lParam);
}


// Generic window procedure passed to WIN32 API, dispatches to KWindow::WndProc
LRESULT CALLBACK KWindow::WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	KWindow * pWindow;
        
	if ( uMsg==WM_NCCREATE )
	{   
		assert( ! IsBadReadPtr((void *) lParam, sizeof(CREATESTRUCT)) );
		MDICREATESTRUCT * pMDIC = (MDICREATESTRUCT *) ((LPCREATESTRUCT) lParam)->lpCreateParams;

		pWindow = (KWindow *) (pMDIC->lParam);

		assert( ! IsBadReadPtr(pWindow, sizeof(KWindow)) );
		SetWindowLong(hWnd, GWL_USERDATA, (LONG) pWindow);
	}
	else
		pWindow=(KWindow *)GetWindowLong(hWnd, GWL_USERDATA);

	if ( pWindow )
		return pWindow->WndProc(hWnd, uMsg, wParam, lParam);
	else
		return DefWindowProc(hWnd, uMsg, wParam, lParam);
}


// Register WNDCLASS for the window class. Registering only once
bool KWindow::RegisterClass(LPCTSTR lpszClass, HINSTANCE hInst)
{
	WNDCLASSEX wc;

	// Check if class is already registered
	wc.cbSize = sizeof(wc);

	if ( ! GetClassInfoEx(hInst, lpszClass, &wc) )
	{
		GetWndClassEx(wc);				// fill class attributes

		wc.hInstance     = hInst;
		wc.lpszClassName = lpszClass;

		if ( !RegisterClassEx(&wc) )	// register
			return false;
	}

	return true;
}


// Handles window creation
bool KWindow::CreateEx(DWORD dwExStyle, LPCTSTR lpszClass, LPCTSTR lpszName, DWORD dwStyle, 
    int x, int y, int nWidth, int nHeight, HWND hParent, 
    HMENU hMenu, HINSTANCE hInst)
{
	if ( ! RegisterClass(lpszClass, hInst) )
		return false;

	// Use MDICREATESTRUCT to support MDI child window
	MDICREATESTRUCT mdic;
	memset(& mdic, 0, sizeof(mdic));
	mdic.lParam = (LPARAM) this;

	m_hWnd = CreateWindowEx(dwExStyle, lpszClass, 
		lpszName, dwStyle, x, y, nWidth, nHeight, 
		hParent, hMenu, hInst, & mdic);
    
	return m_hWnd!=NULL;
}


// Fill WNDCLASSEX, virtual function
void KWindow::GetWndClassEx(WNDCLASSEX & wc)
{
	memset(& wc, 0, sizeof(wc));

	wc.cbSize        = sizeof(WNDCLASSEX);
	wc.style         = 0; // CS_HREDRAW | CS_VREDRAW;
	wc.lpfnWndProc   = WindowProc;
	wc.cbClsExtra    = 0;
	wc.cbWndExtra    = 0;       
	wc.hInstance     = NULL;
	wc.hIcon         = NULL;
	wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
	wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1);
	wc.lpszMenuName  = NULL;
	wc.lpszClassName = NULL;
	wc.hIconSm       = NULL;
}


WPARAM KWindow::MessageLoop(void)
{
	MSG msg;

	m_bMainWindow = true;

	while ( GetMessage(&msg, NULL, 0, 0) )
	{
#ifdef _DEBUG
		TCHAR temp[MAX_PATH];

		wsprintf(temp, _T("Message(0x%x, 0x%x, 0x%x, 0x%x)\n"), msg.hwnd, msg.message, msg.wParam, msg.lParam);
		OutputDebugString(temp);
#endif
		
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}

	return msg.wParam;
}


// Common message processing for MDI Child Window
HRESULT KWindow::CommonMDIChildProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, 
									HMENU hMenu, int nWindowMenu)
{
	switch ( uMsg )
	{
		case WM_NCDESTROY:						   // should be the last message
			SetWindowLong(hWnd, GWL_USERDATA, 0);  // make sure no more message through WindowProc
			delete this;						   // MDI child are created using new operator, time to delete	
			return 0;

		case WM_MDIACTIVATE:
			if ( lParam==(LPARAM) hWnd )		   // if current window activate, switch menu
				SendMessage(GetParent(hWnd), WM_MDISETMENU, (WPARAM) hMenu, (LPARAM) GetSubMenu(hMenu, nWindowMenu));

			// send message to parent window to response to child window change
			SendMessage(GetParent(GetParent(hWnd)), WM_USER, lParam!=(LPARAM) hWnd, 0);	
			return 0;
			
		default:
			// generic MDI child window message handling provided by OS
			return DefMDIChildProc(hWnd, uMsg, wParam, lParam);
	}
}


LRESULT KWindow::OnQueryNewPalette(void)
{
	if ( m_hPalette==NULL )
		return FALSE;

	HDC      hDC = GetDC(m_hWnd);
	HPALETTE hOld= SelectPalette(hDC, m_hPalette, FALSE);

	BOOL changed = RealizePalette(hDC) != 0;
	SelectPalette(hDC, hOld, FALSE);
	ReleaseDC(m_hWnd, hDC);

	if ( changed )
	{
		OutputDebugString(_T("InvalidateRect\n"));
		InvalidateRect(m_hWnd, NULL, TRUE); // repaint
	}

	return changed;
}


LRESULT KWindow::OnPaletteChanged(HWND hWnd, WPARAM wParam)
{ 
	if ( ( hWnd != (HWND) wParam ) && m_hPalette )
	{
		HDC hDC = GetDC(hWnd);
		HPALETTE hOld = SelectPalette(hDC, m_hPalette, FALSE);
				
		if ( RealizePalette(hDC) )
			if ( m_nUpdateCount >=2 )
			{
				InvalidateRect(hWnd, NULL, TRUE);
				m_nUpdateCount = 0;
			}
			else
			{
				UpdateColors(hDC);
				m_nUpdateCount ++;
			}

		SelectPalette(hDC, hOld, FALSE);
		ReleaseDC(hWnd, hDC);
	}

	return 0;
}


int MyMessageBox(HWND hWnd, const TCHAR * text, const TCHAR * caption, DWORD style, int iconid)
{
	MSGBOXPARAMS param;

	memset(& param, 0, sizeof(param));
	param.cbSize	  = sizeof(param);
	param.hwndOwner   = hWnd;
	param.hInstance   = GetModuleHandle(NULL);
	param.lpszText    = text;
	param.lpszCaption = caption;
	param.dwStyle     = style | MB_USERICON;
	param.lpszIcon    = MAKEINTRESOURCE(iconid);

	return MessageBoxIndirect(&param);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品视频一区二区三区免费| 亚洲视频1区2区| 成人中文字幕合集| 国产精品美女久久久久aⅴ| 色综合 综合色| 91同城在线观看| 日韩精品久久理论片| 欧美国产欧美综合| 欧美日韩性生活| 懂色一区二区三区免费观看| 午夜久久久久久久久久一区二区| 久久久久久久久蜜桃| 欧美影院一区二区三区| 黄色成人免费在线| 日本最新不卡在线| 一区二区在线观看免费| 国产精品国产三级国产aⅴ中文 | 日韩欧美精品在线视频| 日本黄色一区二区| www.日韩在线| 成人精品国产福利| 成人免费va视频| 国产传媒一区在线| 黄色成人免费在线| 国产一区二区三区免费看| 免费精品视频最新在线| 日韩在线观看一区二区| 亚洲国产人成综合网站| 一区二区三区四区五区视频在线观看| 中文字幕欧美日本乱码一线二线| 一区在线播放视频| 亚洲国产综合色| 麻豆成人综合网| 国产成人免费视频网站| 日本道色综合久久| 日韩午夜在线观看| 国产欧美一区二区精品婷婷| 亚洲国产电影在线观看| 亚洲一区av在线| 男女男精品视频| 国产成人在线视频免费播放| 日本久久电影网| 欧美写真视频网站| 久久精品视频一区二区三区| 亚洲丝袜自拍清纯另类| 日韩不卡一区二区三区| 韩国精品主播一区二区在线观看 | 国产不卡在线播放| 色中色一区二区| 久久久久久97三级| 亚洲成人免费在线观看| 东方欧美亚洲色图在线| 欧美亚洲精品一区| 欧美经典一区二区三区| 日本在线播放一区二区三区| 成人激情免费视频| 精品毛片乱码1区2区3区| 亚洲成人综合在线| 成人黄色一级视频| 国产色91在线| 国产乱妇无码大片在线观看| 欧美群妇大交群的观看方式| 亚洲精品日产精品乱码不卡| 成人app软件下载大全免费| 欧美大片日本大片免费观看| 亚洲精品视频免费看| 欧美亚洲动漫精品| 亚洲乱码国产乱码精品精98午夜| 成人精品gif动图一区| 国产婷婷色一区二区三区| 久久91精品国产91久久小草| 精品播放一区二区| 久久99精品国产麻豆婷婷| 日韩一区二区在线观看视频| 麻豆成人在线观看| 久久久久久电影| 91丝袜美女网| 午夜激情久久久| 欧美mv和日韩mv的网站| 国产精品亚洲第一区在线暖暖韩国| 国产日产精品1区| 欧美午夜一区二区| 麻豆国产91在线播放| 国产视频一区二区在线| 成人一区二区三区视频在线观看| 国产蜜臀97一区二区三区| 色婷婷综合在线| 黑人精品欧美一区二区蜜桃| 亚洲视频在线一区观看| 日韩一级免费观看| 欧美一区二区三区四区高清| 亚洲精品高清在线| 丝袜诱惑亚洲看片| 精品国产免费久久| 欧美老女人第四色| 欧美一区二区久久| 久久你懂得1024| 国产精品久久久久久久久晋中| 中文成人av在线| 欧美成人猛片aaaaaaa| 99re在线精品| 国产精品原创巨作av| 日韩精品一级中文字幕精品视频免费观看| 日韩午夜激情免费电影| 在线观看av一区二区| 国产精品88av| 国产精品77777竹菊影视小说| 亚洲mv大片欧洲mv大片精品| 国产欧美中文在线| 久久久久久久免费视频了| 欧美乱妇15p| 日韩色在线观看| 欧美一区二区三区视频免费播放| 色8久久人人97超碰香蕉987| 成人v精品蜜桃久久一区| 国产.欧美.日韩| 91美女片黄在线观看| jizzjizzjizz欧美| www.性欧美| 欧美性受xxxx| 欧美成人a在线| 亚洲欧美一区二区视频| 免费一级片91| 成人av资源网站| 2019国产精品| 午夜精品一区二区三区三上悠亚| 国产大片一区二区| 欧美日韩电影在线播放| 亚洲欧洲另类国产综合| 蜜臀av一区二区三区| 色吧成人激情小说| 欧美国产一区在线| 久久se精品一区精品二区| 日本精品视频一区二区三区| 久久久99免费| 精品一区精品二区高清| 欧美日韩国产一级片| 亚洲精品中文字幕在线观看| 国产ts人妖一区二区| 国产精品久久久久久亚洲伦| 亚洲成人免费av| 欧洲国内综合视频| 亚洲成人av中文| 欧美日韩黄色一区二区| 一区二区三区中文字幕在线观看| 色吧成人激情小说| 色狠狠av一区二区三区| 色噜噜狠狠色综合中国| 午夜激情综合网| 中文字幕不卡一区| 7777精品伊人久久久大香线蕉经典版下载| 日韩中文字幕一区二区三区| 国产日产欧美一区二区三区 | 91视频在线观看| 亚洲成人1区2区| 日韩精品最新网址| 99久久精品免费| 五月天精品一区二区三区| 久久久久久久综合色一本| 色综合久久88色综合天天| 蜜桃视频在线一区| 亚洲欧美另类综合偷拍| 91精品免费在线观看| 国产成人综合精品三级| 午夜视频一区二区| 久久久久久久久久美女| 欧美日产在线观看| 色综合一个色综合亚洲| 大桥未久av一区二区三区中文| 一片黄亚洲嫩模| 日本一区二区三区在线不卡| 日韩免费一区二区| 欧美偷拍一区二区| 国产98色在线|日韩| 久久激五月天综合精品| 琪琪久久久久日韩精品| 婷婷综合另类小说色区| 亚洲图片欧美色图| 国产女同互慰高潮91漫画| 欧美一区二区在线播放| 欧美精品色一区二区三区| 欧美视频一区二区三区四区| 欧美撒尿777hd撒尿| 色婷婷综合久久久中文字幕| 91影院在线免费观看| 91免费看片在线观看| 欧亚洲嫩模精品一区三区| 欧美三级视频在线| 日韩精品一区在线| 久久亚洲捆绑美女| 国产精品乱码妇女bbbb| 亚洲精品视频免费看| 免费在线看成人av| 成人av免费在线| 欧美色偷偷大香| 欧美激情在线观看视频免费| 中文字幕第一区第二区| 无码av中文一区二区三区桃花岛| 精品伊人久久久久7777人| 成人av网在线|