程序員求愛的創意程序——升級版^_^

本文由BlueCoder編寫   轉載請說明出處:

http://blog.csdn.net/crocodile__/article/details/10077625

我的郵箱:[email protected]    歡迎大家和我交流編程心得

我的微博:BlueCoder_黎小華    歡迎光臨^_^




前段時間,我編寫了一個創意程序,並用於向自己目前的女朋友表白,結果效果還不錯,得到了她的芳心。

於是我將自己的創意程序共享到csdn資源上,大多數網友認爲創意不錯,就是簡單了些——呵呵,其實我個人也這麼覺得,只不過當時時間和能力的限制,也就那樣將就了

……

點擊下載第一次的程序

……

而今呢,我在七夕節時再次爲我的女朋友寫了一個程序,這次算是上次的升級版吧,功能多了一些、界面效果也好多了

下面,我們就來欣賞一下它的效果吧

(這次的目的和上次一樣,只是做一個模本,所以我僅僅是使用了上次的詩歌和一首最近比較火的歌曲<<誰>>(吳佳唱的,電視劇<<生死相依>>的主題曲),留給大家創作的空間^_^)

 

*************************************************程序及源代碼欣賞******************************************************

(1)開始彈出一個消息框,點擊"是"繼續,點擊"否"直接退出

 

這個就是一個消息框,代碼很簡單:

在主窗口回調函數的WM_CREATE消息中響應:

case WM_CREATE:
	if(IDYES == MessageBox(hwnd, TEXT("準備好傾聽我的心聲了嗎?"), TEXT("LoveWindow"), MB_YESNO))
	{
		Sleep(2000);
	}
	else//選擇否  直接發送窗口銷燬消息,退出窗口
	{
		SendMessage(hwnd, WM_DESTROY, wParam, lParam);
	}


 

 

(2)選擇"是"之後2秒鐘,顯示主窗口的界面

 

(3)這裏在主窗口中建立了三個子窗口,這個一眼就能看見,就不言而喻了——我還是將三個子窗口的窗口回調函數代碼貼出來,內涵註釋

a)詩歌子窗口(左邊長方形的那個)功能及其代碼介紹,均在子窗口PoemChild回調函數中響應

1. 使用MCI控件來播放音樂(基本上可以播放所有的音頻文件,這裏默認選擇了了一首"誰.mp3"這首歌,還比較好聽)

case WM_CREATE://在創建消息中響應
	//開始加載並播放音樂(使用MCI控件)
	hwndMci = MCIWndCreate(hwnd, ((LPCREATESTRUCT)lParam)->hInstance,
						MCIWNDF_SHOWNAME,TEXT("誰.mp3"));
	
	ShowWindow(hwndMci, SW_HIDE);
	MCIWndPlay(hwndMci);


同時通過響應鼠標左鍵消息來控制它的顯示或隱藏

//通過響應鼠標消息來控制MCI播放器的顯示和隱藏
case WM_LBUTTONDOWN:
	if(IsWindowVisible(hwndMci))//如果可視就隱藏,否則顯示
	{
		ShowWindow(hwndMci, SW_HIDE);
	}

	else
	{
		ShowWindow(hwndMci, SW_NORMAL);
	}
	return 0;

 

2. 修改了字體

//在WM_CREATE消息中創建字體
ZeroMemory(&lf, sizeof(LOGFONT));

lf.lfHeight		= -15;
lf.lfUnderline	= 1;

hFont = CreateFontIndirect(&lf);

 

3. 在WM_PAINT消息中繪製位圖,在定時器消息WM_TIMER中顯示詩歌(這個基本上次相同)

//通過定時器來驅動詩歌的顯示
case WM_TIMER:
	hdc = GetDC(hwnd);

	//設定文本顏色
	SetTextColor(hdc, RGB(rand() % 255,
		rand() % 205, rand() % 255));
	SetBkMode(hdc,TRANSPARENT);//設定文本的背景透明

	SelectObject(hdc, hFont);//選擇創建好的字體

	//如果文件讀取完了 , 計時器也應該關閉 , 免得浪費資源
	if(ShowWord(hdc) == EOF)
	{
		KillTimer(hwnd, ID_TIMER_POEM);
	}
	
	ReleaseDC(hwnd, hdc);
	return 0;


b)右上角子窗口,均在LoveChild窗口回調函數中響應

主要就是通過上下移動三種位圖,分別標記"我"、"愛"、"你",感覺比較溫馨

這裏着重看一下WM_PAINT消息中的代碼,其餘的沒什麼特別的,大家可以下載資源以查看完整代碼

case WM_PAINT:
	hdc = BeginPaint(hwnd, &ps);

	hdcMem = CreateCompatibleDC(hdc);

	for(i=0; i<NUM; i++)
	{
		//判斷位圖的位置  並作相應的運動方向的改變
		if(bmpPos[i].y < 0)//上邊界
		{
			moveIndex[i] = rand() % 10 + 5;//通過隨機數來控制移動速度,所以你會發現它們有時快、有時慢
		}

		if(bmpPos[i].y >= (cyClient - cyBitmap))//下邊界
		{
			moveIndex[i] = - (rand() % 10 + 5);
		}

		bmpPos[i].y += moveIndex[i];//修改位圖縱向的位移

		SelectObject(hdcMem, hBmp[i]);

		BitBlt(hdc, bmpPos[i].x, bmpPos[i].y, 
			cxBitmap, cyBitmap, hdcMem, 0, 0, SRCCOPY);//貼位圖
	}

	DeleteDC(hdcMem);
	EndPaint(hwnd, &ps);


 


c)右下角子窗口,這個子窗口主要就是按時變換位圖

在WM_TIMER消息中,使窗口無效而重繪

case WM_TIMER:
	InvalidateRect(hwnd, NULL, TRUE);
	return 0;

 

在WM_PAINT消息中變換背景

case WM_PAINT:
	hdc = BeginPaint(hwnd, &ps);

	hdcMem = CreateCompatibleDC(hdc);

	SelectObject(hdcMem, hBmp[curBmpIndex]);

	BitBlt(hdc, 3, 8, cxBitmap, cyBitmap, hdcMem, 0, 0, SRCCOPY);

	curBmpIndex = (curBmpIndex + 1) % 10;//通過修改位圖索引,來控制下一張背景的顯示,總共10張

	DeleteDC(hdcMem);
	EndPaint(hwnd, &ps);
	return 0;


 

(4)另外,本次使用了Win32的MCI控件,基本上可以播放任意格式的音頻文件

(點擊左邊長方形子窗口,可以控制這個控件的顯示和隱藏)

 

至於這個控件的使用方法,相信大家能很快了解到,不需要我贅述了

 

從這個方面來講,本次的程序還是一個簡易的背景音樂播放器

 

 

ok,因爲大部分技術都是之前講過的,例如:貼位圖、計時器、子窗口==,因此就這樣初略地講一下吧……

希望我的程序能給程序員們帶來靈感,願天下有情人終成眷屬^_^

 

點擊下載程序和源代碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章