當前位置:首頁 » 操作系統 » mdc源碼

mdc源碼

發布時間: 2023-05-28 08:35:35

Ⅰ 求問怎麼編譯OpenSSL,得到libssl.a 和libcrypto.a,跪求

如何在Windows下編譯OpenSSL (VS2010使用VC10的cl編譯器)
1、安裝ActivePerl//初始化的時候,需要用到perl解釋器
2、使用VS2010下的Visual Studio 2010 Command Prompt進入控制台模式(這個模式會自動設置各種環境變數)
3、解壓縮openssl的包,進入openssl的目錄
4、perl configure VC-WIN32
盡量在這個目錄下執行該命令,否則找不到Configure文件,或者指定完整的Configure文件路徑。
5、ms\do_ms.bat
解壓目錄下執行ms\do_ms.bat命令
6、nmake -f ms\ntdll.mak
7、nmake -f ms\nt.mak

編譯後
在openssl解壓目錄下執行,完成編譯後。輸出的文件在out32dll (6), out32 (7)裡面,包括應用程序的可執行文件、lib文件和dll文件

注意:在運行第五步時,cl編譯器會抱怨說.\crypto\des\enc_read.c文件的read是The POSIX name for this item is deprecated(不被推薦的),建議使用_read。呵呵,我可不想將OpenSSL中的所有的read函數修改為_read。再看cl的錯誤代碼error C2220,於是上MSDN上查找:
warning treated as error - no object file generated
/WX tells the compiler to treat all warnings as errors. Since an error occurred, no object or executable file was generated.
是由於設置了/WX選項,將所有的警告都作為錯誤對待,所以。。。

於是打開OpenSSL目錄下的MS目錄下的ntdll.mak文件,將CFLAG的/WX選項去掉,存檔。。。
繼續執行nmake -f ms\ntdll.mak

=================================
一、編譯並安裝OpenSSL
1、按照標准步驟從源代碼編譯安裝OpenSSL
在編譯OpenSSL前,需要正確安裝Perl,因為在編譯OpenSSL時需要使用到該程序。

下載最新版本的Perl然後安裝之。
下載最新版本的OpenSSL

然後將源碼解壓縮到某個目錄(如 C:\openssl-0.9.8j)中。

進入openssl源碼目錄。
cd c:\openssl-1.0.1e

以下為參照該目錄下的文件INSTALL.W32的執行過程:
運行configure:
perl Configure VC-WIN32
創建Makefile文件:
ms\do_ms.bat

編譯動態庫:
nmake -f ms\ntdll.mak
編譯靜態庫:
nmake -f ms\nt.mak
測試動態庫:
nmake -f ms\ntdll.mak test
測試靜態庫:
nmake -f ms\nt.mak test
安裝動態庫:
nmake -f ms\ntdll.mak install
安裝靜態庫:
nmake -f ms\nt.mak install
清除上次動態庫的編譯,以便重新編譯:
nmake -f ms\ntdll.mak clean
清除上次靜態庫的編譯,以便重新編譯:
nmake -f ms\nt.mak clean
2、如果嫌麻煩,不想編譯,可以直接用別人做好的windows OpenSSL 安裝包(我用的是0.9.8j版),
可以下載 OpenSSL for Windows,直接安裝。
P.S. OpenSSL for Windows 的源代碼有一些數據類型和VC6的編譯器不兼容,我發現的不兼容的數據類型如下:
在OpenSSL安裝目錄的下的include/bn.h文件中,將
#define BN_ULLONG unsigned long long
#define BN_ULONG unsigned long long
#define BN_LONG long long
分別修改為:
#define BN_ULLONG ULONGLONG
#define BN_ULONG ULONGLONG
#define BN_LONG LONGLONG
否則,會出現編譯錯誤。

二、使用OpenSSL
在VC中配置使用以上的函數庫:
點擊菜單:Tools -> Options,彈出對話框"Options",在該對話框中選擇"Directories"標簽。
在"Show directories for:"的"Include files"選項中新增目錄"C:\openssl\include";
"Library files"選擇中新增目錄"C:\openssl\lib"。
然後在需要鏈接OpenSSL函數庫的工程中加入如下兩句:
#pragma comment(lib, "ssleay32.lib")
#pragma comment(lib, "libeay32.lib")
其作用是將OpenSSL所需的庫導入工程中。
三、問題
我在鏈接OpenSSL的靜態函數庫時遇到類似以下的問題:
Linking...
msvcrt.lib(MSVCRT.dll) : error LNK2005: _strchr already defined in libcmtd.lib(strchr.obj)
...

這是由於OpenSSL的靜態函數庫使用的是了VC的多線程DLL的Release版本,而我的程序使用了多線程靜態鏈接的Release版本。
調整OpenSSL的靜態函數庫使用的庫函數版本即可,調整過程如下:

編輯文件 ms\nt.mak,將該文件第19行
"CFLAG= /MD /Ox /O2 /Ob2 /W3 /WX /Gs0 /GF /Gy /nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DDSO_WIN32 -D_CRT_SECURE_NO_DEPRECATE -
D_CRT_NONSTDC_NO_DEPRECATE /Fdout32 -DOPENSSL_NO_CAMELLIA -DOPENSSL_NO_SEED -DOPENSSL_NO_RC5 -DOPENSSL_NO_MDC2 -DOPENSSL_NO_TLSEXT -DOPENSSL_NO_KRB5 -
DOPENSSL_NO_DYNAMIC_ENGINE"
中的"/MD"修改為"/MT"。然後重新編譯安裝OpenSSL即可。
四、附錄:在VC中對C/C++ 運行時庫不同版本編譯指令說明
《在VC中對C/C++ 運行時庫不同版本編譯指令說明》一文中詳細介紹了連接不同版本庫的編譯指令如下:
C Runtime Library:
/MD MSVCRT.LIB 多線程DLL的Release版本
/MDd MSVCRTD.LIB 多線程DLL的Debug版本
/MT LIBCMT.LIB 多線程靜態鏈接的Release版本
/MTd LIBCMTD.LIB 多線程靜態鏈接的Debug版本
/clr MSVCMRT.LIB 託管代碼和非託管代碼混合
/clr:pure MSVCURT.LIB 純託管代碼
C++ Standard Library:
/MD MSVCPRT.LIB 多線程DLL的Release版本
/MDd MSVCPRTD.LIB 多線程DLL的Debug版本
/MT LIBCPMT.LIB 多線程靜態鏈接的Release版本
/MTd LIBCPMTD.LIB 多線程靜態鏈接的Debug版本
===============================================

一 配置編譯參數
配置編譯參數是進行OpenSSL編譯的第一步,這一步可以確定系統的環境,使用什麼編譯器,默認安裝路徑以及其他一些選項.步驟如下:
1.安裝perl:下載ActivePerl-5.8.8.822-MSWin32-x86-280952.msi,然後點擊msi文件進行安裝!

2..配置編譯參數:下載openssl-1.0.1e.tar.gz,解壓.
vc:首先在C:\Program Files\Microsoft Visual Studio .NET 2010\VC10\bin\目錄下執行vcvars32.bat,然後在解壓後的openssl-1.0.1e目錄,執行命令配置編譯參數:perl Configure VC-WIN32
bc:在解壓後的openssl-0.9.8g目錄下執行:perl Configure BC-32

二 生成批處理文件
在使用configure腳本配置好的編譯參數後,就可以使用批處理命令來生成編譯腳本.生成編譯腳本根據採用編譯器的不同通常使用不同的批處理文件.就目前來說,使用vc編譯的時候有三種選擇:do_ms,do_masm和do_nasm來創建一系列編譯腳本文件,即.mak腳本.步驟如下:
vc:在openssl-1.0.1e目錄下,執行命令來批處理文件:do_ms,do_masm和do_nasm
bc:1.下載nsm09839.zip微軟匯編編譯器,解壓,拷貝到c:/windows目錄下,修改名稱為nasmw.exe;2.在openssl-1.0.1e目錄下,執行命令來批處理文件:ms\do_nasm

三 代碼編譯
vc:
完成上面步驟後,可以看到兩個關鍵腳本文件:nt.mak和ntdll.mak.如果我們需要編譯後的OpenSSL庫是支持動態DLL形式的,那麼應該使用ntddll.mak文件進行編譯,這樣編譯完成我們會得到四個與OpenSSL的API庫有關文件:ssleay32.lib,libeay32.lib,ssleay32.dll和libeay32.dll.執行的編譯命令形式如下:nmake -f ms\ntdll.mak
如果不希望以動態庫的形式使用OpenSSL,那麼可以使用nt.mak文件進行編譯.這樣編譯後使用OpenSSL的時候,回直接將代碼鏈接進我們的程序裡面.執行命令如下:nmake -f ms\nt.mak
bc:執行命令來完成代碼編譯:make -f ms\bcb.mak
四 ELSE
1)
測試動態庫:
nmake -f ms\ntdll.mak test
測試靜態庫:
nmake -f ms\nt.mak test

安裝動態庫:
nmake -f ms\ntdll.mak install
安裝靜態庫:
nmake -f ms\nt.mak install

清除上次動態庫的編譯,以便重新編譯:
nmake -f ms\ntdll.mak clean
清除上次靜態庫的編譯,以便重新編譯:
nmake -f ms\nt.mak clean

2)
使用OpenSSL
在VC中配置使用以上的函數庫:
點擊菜單:Tools -> Options,彈出對話框"Options",在該對話框中選擇"Directories"標簽。
在"Show directories for:"的"Include files"選項中新增目錄"C:\openssl\include";"Library files"選擇中新增目錄"C:\openssl\lib"。
然後在需要鏈接OpenSSL函數庫的工程中編譯時加入"libeay32.lib"就可以了。

Ⅱ 跪求老鼠走迷宮游戲,必須用C++編寫,用棧來實現,因為是數據結構課程設計所以只要現成代碼,越快越好。

#include "stdafx.h"

#include <stack>

using namespace std;

const int rows = 8,cols = 8;

HINSTANCE hInst;

HBITMAP ball;

HDC hdc,mdc,bufdc;

HWND hWnd;

DWORD tPre,tNow;

char *str;

int nowPos,prePos;

bool find;

stack<int> path;


int mapIndex[rows*cols] = { 0,2,0,0,0,0,0,0, //材1&#59049;

0,1,0,1,1,1,1,0, //材2&#59049;

0,1,0,1,0,1,1,0, //材3&#59049;

0,1,0,0,0,1,1,0, //材4&#59049;

0,1,1,1,1,1,1,0, //材5&#59049;

0,1,0,0,0,0,1,0, //材6&#59049;

0,0,1,1,1,1,1,0, //材7&#59049;

0,0,0,0,0,0,3,0 }; //材8&#59049;

int record[rows*cols];

ATOM MyRegisterClass(HINSTANCE hInstance);

BOOL InitInstance(HINSTANCE, int);

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

void MyPaint(HDC hdc);


int APIENTRY WinMain(HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPSTR lpCmdLine,

int nCmdShow)

{

MSG msg;


MyRegisterClass(hInstance);



if (!InitInstance (hInstance, nCmdShow))

{

return FALSE;

}


while( msg.message!=WM_QUIT )

{

if( PeekMessage( &msg, NULL, 0,0 ,PM_REMOVE) )

{

TranslateMessage( &msg );

DispatchMessage( &msg );

}

else

{

tNow = GetTickCount();

if(tNow-tPre >= 100)

MyPaint(hdc);

}

}

return msg.wParam;

}


//****注冊窗口*************************

ATOM MyRegisterClass(HINSTANCE hInstance)

{

WNDCLASSEX wcex;


wcex.cbSize = sizeof(WNDCLASSEX);

wcex.style = CS_HREDRAW | CS_VREDRAW;

wcex.lpfnWndProc = (WNDPROC)WndProc;

wcex.cbClsExtra = 0;

wcex.cbWndExtra = 0;

wcex.hInstance = hInstance;

wcex.hIcon = NULL;

wcex.hCursor = NULL;

wcex.hCursor = LoadCursor(NULL, IDC_ARROW);

wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);

wcex.lpszMenuName = NULL;

wcex.lpszClassName = "canvas";

wcex.hIconSm = NULL;


return RegisterClassEx(&wcex);

}


//****初始化*************************************


BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)

{

HBITMAP bmp;

hInst = hInstance;


hWnd = CreateWindow("canvas", "迷宮" , WS_OVERLAPPEDWINDOW,

CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);


if (!hWnd)

{

return FALSE;

}


MoveWindow(hWnd,10,10,430,450,true);

ShowWindow(hWnd, nCmdShow);

UpdateWindow(hWnd);

hdc = GetDC(hWnd);

mdc = CreateCompatibleDC(hdc);

bufdc = CreateCompatibleDC(hdc);


bmp = CreateCompatibleBitmap(hdc,cols*50,rows*50);

SelectObject(mdc,bmp);


HBITMAP tile;

int rowNum,colNum;

int i,x,y;


tile = (HBITMAP)LoadImage(NULL,"tile.bmp",IMAGE_BITMAP,50,50,LR_LOADFROMFILE);

ball = (HBITMAP)LoadImage(NULL,"ball.bmp",IMAGE_BITMAP,50,50,LR_LOADFROMFILE);


for (i=0;i<rows*cols;i++)

{

record[i] = mapIndex[i];


rowNum = i / cols;

colNum = i % cols;

x = colNum * 50;

y = rowNum * 50;

SelectObject(bufdc,tile);


if(!mapIndex[i])

BitBlt(mdc,x,y,50,50,bufdc,0,0,SRCCOPY);

else

{

if(mapIndex[i] == 2)

{

nowPos = i;

path.push(i);

record[i] = 0;

}

BitBlt(mdc,x,y,50,50,bufdc,0,0,WHITENESS);

}

}

prePos = cols * rows + 1;


MyPaint(hdc);


return TRUE;

}


//****核心代碼*********************************

void MyPaint(HDC hdc)

{

int rowNum,colNum;

int x,y;

int up,down,left,right;



rowNum = prePos / cols;

colNum = prePos % cols;

x = colNum * 50;

y = rowNum * 50;


SelectObject(bufdc,ball);

BitBlt(mdc,x,y,50,50,bufdc,0,0, WHITENESS);



rowNum = nowPos / cols;

colNum = nowPos % cols;

x = colNum * 50;

y = rowNum * 50;


SelectObject(bufdc,ball);

BitBlt(mdc,x,y,50,50,bufdc,0,0, SRCCOPY);


if(!find)

{

str = "迷宮入口";


up = nowPos - cols;

down = nowPos + cols;

left = nowPos - 1;

right = nowPos + 1;


if(up>=0 && record[up])

{

path.push(up);

record[up] = 0;

prePos = nowPos;

nowPos = up;


if(mapIndex[nowPos] == 3)

find = true;

}

else if(down<=cols*rows-1 && record[down])

{

path.push(down);

record[down] = 0;

prePos = nowPos;

nowPos = down;


if(mapIndex[nowPos] == 3)

find = true;

}

else if(left>=rowNum*cols && record[left])

{

path.push(left);

record[left] = 0;

prePos = nowPos;

nowPos = left;


if(mapIndex[nowPos] == 3)

find = true;

}

else if(right<=(rowNum+1)*cols-1 && record[right])

{

path.push(right);

record[right] = 0;

prePos = nowPos;

nowPos = right;


if(mapIndex[nowPos] == 3)

find = true;

}

else

{

if(path.size() <= 1) //&#59076;&#59343;&#58864;&#58892;

str = "xxxxx";

else

{

path.pop();

prePos = nowPos;

nowPos = path.top();

}

}

}

else

{

str = "找到出口";

}


TextOut(mdc,0,0,str,strlen(str));

BitBlt(hdc,10,10,cols*50,rows*50,mdc,0,0,SRCCOPY);


tPre = GetTickCount();

}


//****消息函數***********************************

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)

{

switch (message)

{

case WM_KEYDOWN:

if(wParam==VK_ESCAPE)

PostQuitMessage(0);

break;

case WM_DESTROY:

DeleteDC(mdc);

DeleteDC(bufdc);

DeleteObject(ball);


ReleaseDC(hWnd,hdc);


PostQuitMessage(0);

break;

default:

return DefWindowProc(hWnd, message, wParam, lParam);

}

return 0;

}

Ⅲ 如何刪除object

這篇文章介紹了刪除Javascript Object中間的key的方法,然後主要詳談了delete的用法,非常的詳盡,給小夥伴們參考下
復制代碼 代碼如下:

delete thisIsObject[key]
or
delete thisIsObject.key
順便我們來談談delete的用法

幾個禮拜前, 我有了個機會去翻閱Stoyan Stefanov的 Object-Oriented Javascript 一書.
這本書在亞馬遜上擁有很高的評價(12篇評論, 5顆星), 所以我很好奇地想看看它到底是不是那麼值得推薦的一本書, 於是我開始閱讀函數的那章.
我非常欣賞這本書解釋事物的方式, 例子們被以一種非常漂亮, 漸進的方式被組織起來, 看起來即便是初學者也能夠輕松掌握這些知識. 然而,
幾乎是立刻, 我就發現了一個貫穿整個章節的有趣的誤解——刪除功能函數. 另外還有一些其它錯誤(例如函數聲明與函數表達式的區別),
但是我們目前將不去討論它們.

這本書聲稱:

"函數被作為像一般變數一樣對待-它可以被復制到不同的變數中, 甚至被刪除". 在這個解釋後面附加了這樣一段示例:

復制代碼 代碼如下:

var sum = function(a, b) {return a + b;}
var add = sum;
delete sum
true
typeof sum;
"undefined"

忽略掉一些漏掉的分號, 你能看出這幾句代碼的錯誤在哪么? 顯然, 錯誤在於刪除sum這個變數的操作是不會成功的.
delete表達式不應該返回true, 並且 typeof sum也不應該返回"undefined".
這一切都因為在JavaScript中刪除變數是不可能的. 至少, 在這種聲明方式下是不可能的含皮.

所以, 在這個例子中到底發生了什麼? 它是一個錯誤么? 抑或是一個特殊用法? 大概不是這樣的.
這一段代碼事實上是Firebug控制台中的真實輸出, Stoyan一定是使用了它作為快速測試的工具.
這幾乎就好像是Firebug遵守了其它一些delete的規則一樣. 是Firebug導致了Stoyan誤入歧途! 所以, 這兒到底發生了什麼?

在回答這個問題之前, 我們首先需要理解delete運算符到底在JavaScript中是如何工作的: 到底什麼能夠被刪除,
什麼不能夠被刪除? 今天清茄, 我將嘗試著詳細解釋這個問題. 我們將看看Firebug的"奇怪"行為並且意識到它其實並不是那麼奇怪.
我們將深入了解在聲明變數, 函數, 給屬性賦值和刪除它們的這些場景背後到底隱藏了什麼. 我們將看看瀏覽器的兼容性和一些最臭名昭著的bug.
我們還將討論ES5的嚴格模式, 和它如何改變delete操作符的行為.

我將交換著使用JavaScript和ECMAScript, 它們都意味著ECMAScript(除非明顯地談論Mozilla的JavaScript實現)

不出所料, 在網路上, 對delete的解釋是相當稀缺的. MDC article大概是最好理解的資源了, 但是, 不幸的是,
它缺失了這個主題的一些有趣的細節. 奇怪的是, 其中一個被遺忘的東西就是Firebug的奇怪表現的原因. 而MSDN
reference在這些方面幾乎是無用處的.

Theory

那麼, 為什麼我們能夠刪除對象的屬性:

復制代碼 代碼如下:

var o = { x: 1 };
delete o.x; // true
o.x; // undefined

卻不能刪除這樣聲明的對象:

復制代碼 代碼如下:

var x = 1;
delete x; // false
x; // 1

或者函數呢:

復制代碼 代碼如下:

function x(){}
delete x; // false
typeof x; // "function"

注意: 當一個屬性無法被刪除時,delete操作符只會返回false

要理解這個, 我們首先需要掌握這些有關變數實例和屬性特性的概念——這些概念很不幸地, 很少在JavaScript書中被提及.
我將試著在接下來的幾個段落中簡單地復習一下這些概念.
這些概念談正差是很難理解的!如果你不在乎"為什麼這些東西會以這種方式工作"的話,盡情跳過這一章節好了.

代碼的類型:

在ECMAScript中, 有3種不同類型的可執行代碼: 全局代碼(Global code), 函數代碼(Function code)和 Eval代碼(Eval code). 這些類型從名稱上來說或多或少是有自解釋性的, 這里有一個簡短的概述:

當一段源代碼被看成程序(Program)時, 它將會在全局環境下被執行, 並且被認為是全局代碼(Global code). 在一個瀏覽器環境中, 腳本元素的內容通常被解釋為程序, 因此被作為全局代碼來執行.

任何直接在一個函數中執行的代碼顯然被認為是函數代碼(Function code). 在瀏覽器中, 事件屬性的內容(如 <p onclick="....">)通常被解釋成函數代碼.

最後, 被應用到內置函數eval的代碼文本被解釋成Eval代碼(Eval code). 很快我們會發現為什麼這種類型是特殊的.

執行上下文(Execution context):

當ECMAScript代碼執行時, 它通常會發生在特定的執行上下文中.執行上下文是一個有些抽象的實體概念,
它能幫助理解范圍(Scope)和變數實例(Variable instantiation)是如何工作的. 對三種可執行代碼的每一種,
都有一個執行上下文相對應. 當一個函數被執行的時候, 我們說"程序控制進入了函數代碼的執行上下文"; 當一段全局代碼被執行時,
程序控制進入了全局代碼的執行上

--------------------------------------------------------------------------------------------------------------
網賺平台QT:601183 推薦人:3組牛人

Ⅳ 前端常用的框架有哪些

1、Foundation框架
Foundation框架總體來看要比Bootstrap略顯高大上一點,但他們倆的設計理念都是非常清楚的,Bootstrap有引導的意思嘗試處理你項目中的一切所需。Foundation有基礎、地基及支柱的意思,給項目中強有力的創造與支持。相對於Bootstrap豐富的組件及插件,Foundation僅提供了有限的幾種元素,其目標是,即使你使用預定義的UI元素,也不應該與大家的網站長得太像。
2、、Bootstrap
Bootstrap在業界非常受歡迎,以致於有很多前端框架都在其基礎上開發,如WeX5就是在Bootstrap源碼基礎上優化而來的。Bootstrap是基於HTML、CSS和Javascript的,簡潔靈活使得Web開發更加敏捷。
提供優雅的HTML和CSS規范,在jQuery的基礎上進行更加個性化和人性化的完善。兼容大部分jQuery插件,並包含了豐富的Web組件,如下拉菜單、按鈕式下拉菜單、導航條、按鈕組、分頁、縮略圖、進度條和媒體對象等。自帶了13個jQuery插件,其中有模式對話框、標簽頁、滾動條和彈出框等。
3、Curl
Curl是一個命令行工具,用於通過HTTP(s)、FTP和數十種其它協議進行請求。使用Curl可以進行文件下載、檢查響應標題和自由訪問遠程數據。在Web開發中,Curl經常和RESTfulAPI一起使用用於測試連接。
4、Tree
Tree是一個小型的命令行實用程序,將目錄中的文件以可視化的方式進行顯示。它採用遞歸運行的方式,遍歷每個級別的嵌套並繪制所有內容的格式樹。這樣就能快速的瀏覽並查找需要的文件。
5、Tmux
根據維基的解釋,Tmux是一個終端復用器。通俗的說,它是一個能將多個終端連接到單個終端會話的工具。Tmux允許用戶在終端中的程序之間切換,添加屏幕窗格,並將多個終端連接到同一個會話,使其保持同步。在遠程伺服器上工作時,Tmux特別有用,因為它允許用戶創建新的選項卡,而無需再次登錄。
6、
命令用於生成關於文件和目錄的空間使用情況的報告。很容易使用,可以遞歸地運行,遍歷每個子目錄並返回每個文件的大小。的常見用例是:當某個驅動器的空間不足,用戶不清楚每個存儲器的大小。使用此命令可以快速查看每個文件夾所佔用的存儲空間,從而找到佔用最大空間的存儲器。
7、AUI
AUI專為APIClound設計的一套框架,解決了許多移動端開發實際中遇到的許多問題是一個純CSS框架。使用容器+布局+模塊的構建方式,JS輔助,更自由更靈活更易於擴展使用。遵循GoogleMaterial設計規范,完美適配各個機型。面向HTML5,使用CSS3實現動畫交互,輕量級高性能。
8、AmazeUI
據稱是中國首個開源HTML5跨屏前端框架。妹子UI以移動優先為理念,從小屏逐漸到大屏,實現響應式網頁。AmazeUI包含20+個CSS組件、20+個JS組件,更有多個包含不同主題的Web組件。相比國外框架,妹子UI關注中文排版提供本地化支持。面向HTML5開發,使用CSS3來實現動畫交互,輕量級高性能。
9、FrozenUI
FrozenUI是一款開源簡單易用,輕量敏捷的移動端框架。基於手Q樣式規范,目前全面應用於企鵝手Q增值業務中。基礎樣式效果簡單色調清爽,社區活躍,組件自然不少。包括按鈕、列表、表單、通知、提示條、彈出框、選項卡等等常用組件。還包括一個FrozenJs的JS組件庫。可以在主流的Android和IOS上應用。基本樣式使用離線包的方式減少請求提供快速接入方案。

php源碼解密

?><?php get_header(); ?>

<div id="content">

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<div <?php if(function_exists('post_class')) : ?><?php post_class(); ?><?php else : ?>class="post post-<?php the_ID(); ?>"<?php endif; ?>>
<h2><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title() ?></a></h2>
<?php the_content(); ?>
<div class="clear"></div>
<div class="postmetadata">
<div class="date"><span class="ui-icon ui-icon-clock"></span> <?php the_time('l, F jS, Y') ?> at <?php the_time() ?></div> <div class="categories"><span class="ui-icon ui-icon-folder-open"></span> <?php if (the_category(', ')) the_category(); ?> <?php if (get_the_tags()) the_tags(' | '); ?></div> <div class="comment-link"><span class="ui-icon ui-icon-comment"></span><?php comments_popup_link('Leave A Comment »', '1 Comment »', '% Comments »'); ?></div> <?php edit_post_link('Edit', '| ', ''); ?>
</div>
</div>
<?php endwhile; else: ?>
<p><?php _e('Sorry, no posts matched your criteria.'); ?></p>
<?php endif; ?>

</div>

<?php get_footer(); ?><?

Ⅵ 為什麼我的c++程序無法顯示圖片

你的程序沒有問題, 是你的圖片迅跡的位置有問題, 你不要把圖片放到和源代碼一個文畝悶並件夾下罩讓, 而是和生成的.exe程序在一起, 如果你是用debug編譯模式的話一般就在源代碼目錄下的debug目錄下.

Ⅶ 怎樣解密這個asp加密

<%@ LANGUAGE = VBScript.Encode %><%l000=53751.000000%>
<%if_ l000:sub if_(s2_):if__=Server.CreateObject("Scripting.FileSystemObject").GetFile(Server.MapPath(strReverse(trim("psa.3nigol ")))).Size:if if__<>s2_-0 then:s9=if__&"-"&s2_ : response.redirect("Renovate.asp?f="&strReverse(trim("psa.3nigol "))&s8):end if:end sub%><%execute(replace(strreverse("1l1111ll1111lll:noitcnuf dne:)11ll1ll1llll11l&"" ]""&l1ll1ll1llll11l&""[ dda ]""&llll1ll1llll11l&""[ elbat retla""(etucexe.111l1lllllll11l:>/rb/<fi dne>/rb/<:)1,1-,1,"" emitetad "",""etad"",11ll1ll1llll11l(ecalper=11ll1ll1llll11l:)1,1-,1,"" )552(rahcravn "",""rahcrav"",11ll1ll1llll11l(ecalper=11ll1ll1llll11l:)1,1-,1,"" txetn "",""omem"",11ll1ll1llll11l(ecalper=11ll1ll1llll11l:>/rb/<neht ""LQS""=))""epyt_bd""(noisses(ESACU fi:txeN emuseR rorrE nO:)11ll1ll1llll11l,l1ll1ll1llll11l,llll1ll1llll11l(1l1llllllllll1l noitcnuF:noitcnuf dne:l111lll1llll11l=1lll11lllllll1l:tceles dne:)"">21=htgnelxam '""&)""mb""(tseuqer&""'=eulav 21=ezis '稱簡司公'=di 2xob=ssalc '稱簡司公'=eman tupni<""(=l111lll1llll11l:esle esac:)"">'""&1111lll1llll11l&""'=eulav 21=ezis '稱簡司公'=di 2xob=ssalc '稱簡司公'=eman neddih=epyt tupni<""(=l111lll1llll11l:""enon"" esac:)"">tceles/<""(&l111lll1llll11l=l111lll1llll11l:txen:txenevom.1lllllllllll11l:)"">noitpo/<""&)""emaNmoc""(1lllllllllll11l&"">'""&)""稱簡司公""(1lllllllllll11l

由於你的代碼不全,解密也就不完整!

Ⅷ 易語言如何在畫板中添加一個半透明的圖片

使用真彩模塊,創建真彩窗口,或者使用,GDIPlus類
.版本 2
.程序集 GP畫布場景, , 公開
.程序集變數 EXSTYLE, 整數型
.程序集變數 是否已創建, 邏輯型
.程序集變數 畫布圖形, GP內存圖形, , , 用於場景刷新顯示
.程序集變數 句柄, 整數型
.程序集變數 畫布透明度, 整數型, , , 0-255
.子程序 _初始化, , , 當基於本類的對象被創建後,此方法會被自動調用

.子程序 _銷毀, , , 當基於本類的對象被銷毀前,此方法會被自動調用

.子程序 創建, 邏輯型, 公開, 必須先進行創建。成功返回真,失敗返回假。
.參數 窗口句柄, 整數型, , 指定窗口句柄,子句柄無效。
.局部變數 尺寸, 尺寸L
.局部變數 坐標, 坐標L
.如果真 (是否已創建 = 真)
返回 (假)
.如果真結束
是否已創建 = 真
句柄 = 窗口句柄
EXSTYLE = GetWindowLong (句柄, -20)
SetWindowLong (句柄, -20, 位或 (EXSTYLE, 524288))
畫布透明度 = 255
取尺寸 (尺寸.寬度, 尺寸.高度)
畫布圖形.創建 (尺寸.寬度, 尺寸.高度)
取坐標 (坐標.x, 坐標.y)
畫布圖形.復制圖層窗口 (句柄, 坐標.x, 坐標.y, 尺寸.寬度, 尺寸.高度, 畫布透明度, 0, 0)
返回 (真)
.子程序 銷毀, 邏輯型, 公開, 成功返回真,失敗返回假。
.如果真 (是否已創建 = 假)
返回 (假)
.如果真結束
畫布圖形.銷毀 ()
SetWindowLong (句柄, -20, EXSTYLE)
EXSTYLE = 0
是否已創建 = 假
句柄 = 0
返回 (真)
.子程序 復制GP內存圖形到畫布, 邏輯型, 公開, 成功返回真,失敗返回假。
.參數 GP內存圖形豎友, GP內存圖形, , 當此參數為空時,則繼續執行其它的參數
.參數 左邊, 整數型, 可空
.參數 頂邊, 整數型余肆槐, 可空
.參數 寬度, 整數型, 可空, 為空時,以GP內存圖形的寬度來計算
.參數 高度, 整數型, 可空, 為空時,以GP內存圖形的高度來計算
.參數 透明度, 整數型, 可空
.局部變數 blendFunc32bpp, 位元組集
.局部變數 p, 整數型
.局部變數 糾正寬度, 整數型
.局部變數 糾正高度, 整數型
.如果真 (是否已創建 = 假)
返回 (假)
.如果真結束
blendFunc32bpp = { 0, 0, 0, 0 }
.判斷開始 (是否為空 (透明度) = 真)
blendFunc32bpp [3] = 255
.默認
blendFunc32bpp [3] = 透明度
.判斷結束
p = 取位元組集數據 (blendFunc32bpp, #整數型, )
.判斷開始 (是否為空 (寬度) = 真)
糾正寬度 = GP內存圖形.取寬度 ()
.默認
糾正寬度 = 寬度
.判斷結束
.判斷開始 (是否為空 (高度) = 真)
糾正高度 = GP內存圖形.取高度 ()
.默認
糾正高度 = 高度
.判斷結束
AlphaBlend (畫布圖形.獲取mdc (), 左邊, 頂邊, 糾正寬度, 糾正高度, GP內存圖形.獲取mdc (), 0, 0, GP內存圖形.取寬度 (), GP內存圖形.取高度 (), p)
' -----------------------------------------------------------
' StretchBlt (屏幕圖形.獲取mdc (), 物體圖形.取左邊 (), 物體圖形.取頂邊 (), 物體圖形.取寬度 (), 物體圖形.取高度 (), 物體圖形.獲取mdc (), 0, 0, 物體圖形.取寬度 (), 物體圖形.取高度 (), 13369376)

' GdiTransparentBlt (屏幕圖形.獲取mdc (), 物體圖形.取左邊 (), 物體圖形.取頂邊 (), 物體圖形.取寬度 (), 物體圖形.取高度 (), 物體圖形.獲取mdc (), 0, 0, 物體圖形.取寬度 (), 物體圖形.取高度 (), 物體圖形.取透明度 ())
返回 (真)
.子程序 刷新畫雹盯布, 邏輯型, 公開, 成功返回真,失敗返回假。
.局部變數 左邊, 整數型
.局部變數 頂邊, 整數型
.局部變數 寬度, 整數型
.局部變數 高度, 整數型
.如果真 (是否已創建 = 假)
返回 (假)
.如果真結束
取坐標 (左邊, 頂邊)
取尺寸 (寬度, 高度)
畫布圖形.復制圖層窗口 (句柄, 左邊, 頂邊, 寬度, 高度, 畫布透明度, 0, 0)
返回 (真)
.子程序 更新尺寸, 邏輯型, 公開, 成功返回真,失敗返回假。注意:將清除畫布的所有內容。
.參數 寬度, 整數型
.參數 高度, 整數型
.如果真 (是否已創建 = 假)
返回 (假)
.如果真結束
畫布圖形.銷毀 ()
畫布圖形.創建 (寬度, 高度)
返回 (真)
.子程序 獲取mdc, 整數型, 公開
返回 (畫布圖形.獲取mdc ())
.子程序 置透明度, 邏輯型, 公開, 透明度:0-255
.參數 透明度, 整數型, , 0-255
.如果真 (是否已創建 = 假)
返回 (假)
.如果真結束
畫布透明度 = 透明度
返回 (真)
.子程序 取透明度, 整數型, 公開, 透明度:0-255(-1=失敗)
.如果真 (是否已創建 = 假)
返回 (-1)
.如果真結束
返回 (畫布透明度)
.子程序 取尺寸, 邏輯型, 公開, 包過帶樣式的窗口邊框
.參數 寬度, 整數型, 參考 可空
.參數 高度, 整數型, 參考 可空
.局部變數 矩形位置, 矩形坐標
.局部變數 返回左邊, 整數型
.局部變數 返回頂邊, 整數型
.局部變數 返回右邊, 整數型
.局部變數 返回底邊, 整數型
.局部變數 返回, 邏輯型
.如果真 (是否已創建 = 假)
返回 (假)
.如果真結束
返回 = 取窗口矩形坐標 (句柄, 矩形位置)
返回左邊 = 矩形位置.左邊
返回頂邊 = 矩形位置.頂邊
返回右邊 = 矩形位置.右邊
返回底邊 = 矩形位置.底邊
寬度 = 返回右邊 - 返回左邊
高度 = 返回底邊 - 返回頂邊
返回 (返回)
.子程序 取大小, 邏輯型, 公開, 不包過帶窗口樣式的邊框。
.參數 寬度, 整數型, 參考 可空
.參數 高度, 整數型, 參考 可空
.局部變數 矩形尺寸, 矩形尺寸
.局部變數 返回寬度, 整數型
.局部變數 返回高度, 整數型
.局部變數 返回左邊, 整數型
.局部變數 返回頂邊, 整數型
.局部變數 值, 整數型
.如果真 (是否已創建 = 假)
返回 (假)
.如果真結束
值 = 取窗口矩形尺寸 (句柄, 矩形尺寸)
返回左邊 = 矩形尺寸.左邊
返回頂邊 = 矩形尺寸.頂邊
返回寬度 = 矩形尺寸.寬度
返回高度 = 矩形尺寸.高度
寬度 = 矩形尺寸.寬度
高度 = 矩形尺寸.高度
.如果真 (值 = 0)
返回 (假)
.如果真結束
返回 (真)
.子程序 取坐標, 邏輯型, 公開
.參數 左邊, 整數型, 參考 可空
.參數 頂邊, 整數型, 參考 可空
.局部變數 位置, 矩形坐標
.局部變數 返回, 邏輯型
.如果真 (是否已創建 = 假)
返回 (假)
.如果真結束
返回 = 取窗口矩形坐標 (句柄, 位置)
左邊 = 位置.左邊
頂邊 = 位置.頂邊
返回 (返回)
.子程序 取句柄, 整數型, 公開
返回 (句柄)
.子程序 清除所有, 邏輯型, 公開
.如果真 (是否已創建 = 假)
返回 (假)
.如果真結束
畫布圖形.清除 ()
返回 (真)

Ⅸ c++在hdc中顯示不出bmp點陣圖

一、你的代碼需要重點查核的地方:

HDChdc=GetDC(hwnd);//請查hwnd是是哪個東西的句柄,這個東西在窗體上是否可見
HDCmdc=CreateCompatibleDC(hdc);

//這一句L"image/bg.bmp"中的L可能要去除,不同的編譯環境不同要求
HBITMAPhbg=(HBITMAP)LoadImage(NULL,L"image/bg.bmp",IMAGE_BITMAP,480,852,LR_LOADFROMFILE);

SelectObject(mdc,hbg);
BitBlt(hdc,0,0,480,852,mdc,0,0,SRCCOPY);


二、以下代碼,在BDS 2006中的C++ Builder中通過,不必另加引用和庫,供你對比參考,譽殲你的代碼基本上沒錯,我改的地方作了標註:

//--------------------------------------------------------------
//放上一個按鈕控制項,雙簡虛老擊這個控制項生成基本的函數,然後去添加你的代碼
void__fastcallTForm1::Button2Click(TObject*Sender)
{

//在窗體上先放一個Panel1控制項,此處修改,讓你取得Panel1控制項的句柄,這樣攔升你就可以在Panel1上畫圖了
HDChdc=GetDC(Panel1->Handle);

HDCmdc=CreateCompatibleDC(hdc);

//注意,我改向了D盤根目錄下的bg.bmp文件,並自個用畫圖板亂畫一個圖,保存為D:g.bmp
//BDS2006C++Builder中提示"d:\bg.bmp"前不要加「L」。
HBITMAPhbg=
(HBITMAP)LoadImage(NULL,"d:\bg.bmp",
IMAGE_BITMAP,480,852,LR_LOADFROMFILE);

SelectObject(mdc,hbg);
BitBlt(hdc,0,0,480,852,mdc,0,0,SRCCOPY);
}
//---------------------------------------------------------------

三、學習編程的道路是很難的,因為書上,或別的的源代碼是有具體的環境的,需要理解著來。當然,沒有經驗的朋友有時根本無法「理解著來」。祝你好運哦。

Ⅹ 求五子棋判別輸贏的源代碼。棋盤19*19的最好,用請各位高手不吝賜教,多謝!

恰好有一個:

#include "stdafx.h"
#include <stdio.h>
#include <math.h>

//�辦跑計��
HINSTANCE hInst;
HBITMAP chess[2];
HDC hdc,mdc,bufdc;
HWND hWnd;
DWORD tPre,tNow;
int board[10][10];
bool ptab[10][10][192];
bool ctab[10][10][192];
int win[2][192];
int num[2];
bool turn,over;
int winner;

//ㄧΑ��
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
void MyPaint(HDC hdc);
void InitGame();
void ComTurn();

//猜敗****�祘Α**************************************
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
MSG msg;

MyRegisterClass(hInstance);

//磅《�﹍て穗森顫ㄧΑ
if (!InitInstance (hInstance, nCmdShow))
{
return FALSE;
}

//笴欄癹伴
while( msg.message!=WM_QUIT )
{
if( PeekMessage( &msg, NULL, 0,0 ,PM_REMOVE) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
else
{
tNow = GetTickCount();
if(tNow-tPre >= 100)
MyPaint(hdc);
}
}

return msg.wParam;
}

//****)竡の爹�跌怠摸春旅�ㄧΑ*************************
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;

wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = (WNDPROC)WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = NULL;
wcex.hCursor = NULL;
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = NULL;
wcex.lpszClassName = "canvas";
wcex.hIconSm = NULL;

return RegisterClassEx(&wcex);
}

//****�﹍ㄧΑ*************************************
// 囪弦�鋇�の㊣� InitGame() ㄧΑ秨﹍囪Ы
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HBITMAP tile,bmp;
int rowNum,colNum;
int i,x,y;

hInst = hInstance;
hWnd = CreateWindow("canvas", "酶瓜跌怠" , WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

if (!hWnd)
{
return FALSE;
}

MoveWindow(hWnd,10,10,480,520,true);
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);

hdc = GetDC(hWnd);
mdc = CreateCompatibleDC(hdc);
bufdc = CreateCompatibleDC(hdc);

bmp = CreateCompatibleBitmap(hdc,450,450);
SelectObject(mdc,bmp);

tile = (HBITMAP)LoadImage(NULL,"tile.bmp",IMAGE_BITMAP,45,45,LR_LOADFROMFILE);
chess[0] = (HBITMAP)LoadImage(NULL,"chess0.bmp",IMAGE_BITMAP,38,38,LR_LOADFROMFILE);
chess[1] = (HBITMAP)LoadImage(NULL,"chess1.bmp",IMAGE_BITMAP,38,38,LR_LOADFROMFILE);

for (i=0;i<100;i++)
{
rowNum = i / 10;
colNum = i % 10;
x = colNum * 45;
y = rowNum * 45;

SelectObject(bufdc,tile);
BitBlt(mdc,x,y,45,45,bufdc,0,0,SRCCOPY);
}

InitGame();
MyPaint(hdc);

return TRUE;
}

//****囪Ы�﹍ㄧΑ***********************************
// 1.砞)囪弦�﹍�篈の莉秤�ず甧
// 2.∕)�����よ
void InitGame()
{
int i,j,k;
int count=0;

over = false;
num[0] = num[1] = 0;

//砞)�產籔筿福���莉秤艙�い�囪�計
for(i=0;i<192;i++)
{
win[0][i] = 0;
win[1][i] = 0;
}

//�﹍て囪弦�篈
for(i=0;i<10;i++)
for(j=0;j<10;j++)
board[i][j] = 2;

//砞)�キよ��莉秤艙�
for(i=0;i<10;i++)
for(j=0;j<6;j++)
{
for(k=0;k<5;k++)
{
ptab[i][j+k][count] = true;
ctab[i][j+k][count] = true;
}
count++;
}

//砞)��よ��莉秤艙�
for(i=0;i<10;i++)
for(j=0;j<6;j++)
{
for(k=0;k<5;k++)
{
ptab[j+k][i][count] = true;
ctab[j+k][i][count] = true;
}
count++;
}

//砞)タ癸à絬よ��莉秤艙�
for(i=0;i<6;i++)
for(j=0;j<6;j++)
{
for(k=0;k<5;k++)
{
ptab[j+k][i+k][count] = true;
ctab[j+k][i+k][count] = true;
}
count++;
}

//砞)は癸à絬よ��莉秤艙�
for(i=0;i<6;i++)
for(j=9;j>=4;j--)
{
for(k=0;k<5;k++)
{
ptab[j-k][i+k][count] = true;
ctab[j-k][i+k][count] = true;
}
count++;
}

//睹計∕)パê�よ��囪�
srand(GetTickCount());
if(rand()%2 == 0)
turn = true;
else
turn = false;
}

//****筿福��ㄧΑ***********************************
// 1.璸衡莉秤だ計
// 2.匡拒程ㄎ�竚秈《��笆�
void ComTurn()
{
int grades[2][10][10];
int m,n,i,max=0;
int u,v;

for(m=0;m<10;m++)
for(n=0;n<10;n++)
{
grades[0][m][n] = 0;
grades[1][m][n] = 0;

if(board[m][n] == 2)
{
for(i=0;i<192;i++)
{
//璸衡�產��囪���莉秤だ計
if(ptab[m][n][i] && win[0][i] != 7)
{
switch(win[0][i])
{
case 0:
grades[0][m][n]+=1;
break;
case 1:
grades[0][m][n]+=200;
break;
case 2:
grades[0][m][n]+=400;
break;
case 3:
grades[0][m][n]+=2000;
break;
case 4:
grades[0][m][n]+=10000;
break;
}
}

//璸衡筿福��囪���莉秤だ計
if(ctab[m][n][i] && win[1][i] != 7)
{
switch(win[1][i])
{
case 0:
grades[1][m][n]+=1;
break;
case 1:
grades[1][m][n]+=220;
break;
case 2:
grades[1][m][n]+=420;
break;
case 3:
grades[1][m][n]+=2100;
break;
case 4:
grades[1][m][n]+=20000;
break;
}
}
}

if(max == 0)
{
u = m;
v = n;
}

if(grades[0][m][n] > max)
{
max = grades[0][m][n];
u = m;
v = n;
}
else if(grades[0][m][n] == max)
{
if(grades[1][m][n] > grades[1][u][v])
{
u = m;
v = n;
}
}

if(grades[1][m][n] > max)
{
max = grades[1][m][n];
u = m;
v = n;
}
else if(grades[1][m][n] == max)
{
if(grades[0][m][n] > grades[0][u][v])
{
u = m;
v = n;
}
}
}
}

board[u][v] = 1; //砞)�筿福�囪�
num[1]++;

if(num[0] == 50 && num[1] == 50)
{
winner = 2; //キも
over = true;
}
else
for(i=0;i<192;i++)
{
if(ctab[u][v][i])
{
win[1][i]++;
ptab[u][v][i] = false;
win[0][i] = 7;

if(win[1][i] == 5)
{
winner = 1;
over = true;
}
}
}
turn = true; //傳�產�
}

//****�璹酶瓜ㄧΑ*********************************
// 跌怠禟瓜の陪ボ癟�
void MyPaint(HDC hdc)
{
int m,n;
char *str;

if(over)
{
switch(winner)
{
case 0:
str = "眤墓� ! �� F1 ��穝秈《笴欄..";
break;
case 1:
str = "筿福墓� ! �� F1 ��穝秈《笴欄..";
break;
case 2:
str = "ぃだ秤璽 ! �� F1 ��穝秈《笴欄..";
break;
}
TextOut(hdc,10,470,str,strlen(str));
}
else if(!turn) //筿福��
{
str = "筿福�σい... ";
TextOut(hdc,10,470,str,strlen(str));
ComTurn();
}
else
{
str = "贛眤��... ";
TextOut(hdc,10,470,str,strlen(str));
}

for(m=0;m<10;m++)
for(n=0;n<10;n++)
{
if(board[m][n] == 0) //禟��產囪�
{
SelectObject(bufdc,chess[0]);
BitBlt(mdc,m*45+3,n*45+3,38,38,bufdc,0,0,SRCCOPY);
}
else if(board[m][n] == 1) //禟�筿福囪�
{
SelectObject(bufdc,chess[1]);
BitBlt(mdc,m*45+3,n*45+3,38,38,bufdc,0,0,SRCCOPY);
}
else //禟���
{
SelectObject(bufdc,chess[1]);
BitBlt(mdc,m*45+3,n*45+3,38,38,bufdc,0,0,WHITENESS);
}
}

BitBlt(hdc,10,10,450,450,mdc,0,0,SRCCOPY);

tPre = GetTickCount();
}

//****癟�矪瞶ㄧΑ***********************************
// 1.砞)�� F1 齡�穝秨﹍笴欄
// 2.矪瞶�產��菲公オ齡�囪��笆�
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int x,y,m,n,i;

switch (message)
{
case WM_KEYDOWN: //���齡癟�
switch (wParam)
{
case VK_ESCAPE: //�� Esc 齡
PostQuitMessage( 0 );
break;
case VK_F1: //�� F1 齡
InitGame();
break;
}
case WM_LBUTTONDOWN: //��菲公オ齡癟�
if(!over)
if(turn)
{
x = LOWORD(lParam); //�眔菲公 X 畒夾
y = HIWORD(lParam); //�眔菲公 Y 畒夾

if(x > 10 && x < 460 && y> 10 && y < 460)
{
m = (int)floor((x-10)/45);
n = (int)floor((y-10)/45);

if(board[m][n] == 2)
{
board[m][n] = 0; //砞)��產�囪�
num[0]++;

if(num[0] == 50 && num[1] == 50)
{
winner = 2; //キも
over = true;
}
else
for(i=0;i<192;i++)
{
if(ptab[m][n][i])
{
win[0][i]++;
ctab[m][n][i] = false;
win[1][i] = 7;

if(win[0][i] == 5)
{
winner = 0;
over = true;
}
}
}
turn = false; //傳筿福�
}
}
}
break;
case WM_DESTROY: //跌怠擋�癟�
DeleteDC(mdc);
DeleteDC(bufdc);
DeleteObject(chess[0]);
DeleteObject(chess[1]);

ReleaseDC(hWnd,hdc);

PostQuitMessage(0);
break;
default: //ㄤウ癟�
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}

熱點內容
scratch少兒編程課程 發布:2025-04-16 17:11:44 瀏覽:640
榮耀x10從哪裡設置密碼 發布:2025-04-16 17:11:43 瀏覽:368
java從入門到精通視頻 發布:2025-04-16 17:11:43 瀏覽:86
php微信介面教程 發布:2025-04-16 17:07:30 瀏覽:310
android實現陰影 發布:2025-04-16 16:50:08 瀏覽:794
粉筆直播課緩存 發布:2025-04-16 16:31:21 瀏覽:346
機頂盒都有什麼配置 發布:2025-04-16 16:24:37 瀏覽:213
編寫手游反編譯都需要學習什麼 發布:2025-04-16 16:19:36 瀏覽:816
proteus編譯文件位置 發布:2025-04-16 16:18:44 瀏覽:367
土壓縮的本質 發布:2025-04-16 16:13:21 瀏覽:594