2008年4月10日 星期四

HTML VIEW學習筆記

要在建立html view, 一定要include htmlctrl.h 及 htmlview.lib

//Handle to HTML view control
HWND m_hwndHtml;
HINSTANCE m_HtmlViewInstance;

初始化:

if (m_HtmlViewInstance == 0) {
m_HtmlViewInstance = ::LoadLibrary(L"htmlview.dll");
}
else
return FALSE;

VERIFY(InitHTMLControl(m_HtmlViewInstance));

DWORD dwStyle = WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS|WS_BORDER;
RECT rect;
GetClientRect(GetForegroundWindow(), &rect);
m_hwndHtml = CreateWindow (DISPLAYCLASS,
NULL,
dwStyle,
rect.left,
rect.top,
rect.right,
rect.bottom,
hWnd,
0,
m_HtmlViewInstance,
NULL);
if( !m_hwndHtml)
return FALSE;

SetWindowLong(m_hwndHtml, GWL_ID, 77777);
SetFocus (m_hwndHtml);
SendMessage(m_hwndHtml, WM_SETTEXT, 0, (LPARAM)(LPCTSTR)_T(""));

wchar_t None[1024];
LoadString(g_hInst,IDS_HTMLTEXT,None,1024);
SetHtml(None);

=============================================================

void SetHtml(wchar_t *strHtml)
{
SendMessage(m_hwndHtml, WM_SETTEXT, 0, (LPARAM)(LPCTSTR)_T(""));
SendMessage(m_hwndHtml, DTM_ADDTEXTW, FALSE, (LPARAM)(LPCTSTR)strHtml);
SendMessage(m_hwndHtml, DTM_ENDOFSOURCE, 0, 0);
}
==============================================================

接著, 在訊息迴圈中 handle WM_NOTIFY 處理相關的動作。

case WM_NOTIFY:
{
NM_HTMLVIEW * pnmHTML = (NM_HTMLVIEW *) lParam;
LPNMHDR pnmh = (LPNMHDR) &(pnmHTML->hdr);

INLINEIMAGEINFO InlineImageInfo;
//DWORD dwCookieValue;
//LPSTR szSRCText;
HBITMAP hBitmap;

//NMHDR * pnmh = (NMHDR *)lParam;

switch (pnmh->code)
{
case NM_HOTSPOT:
{
OnLink(pnmHTML->szTarget);
//OutputDebugString(TEXT("NM_HOTSPOT\r\n"));
break;
}

case NM_INLINE_IMAGE:
{
if( 0==wcscmp( pnmHTML->szTarget,(LPCWSTR)L"rose")){
hBitmap = LoadBitmap( g_hInst, MAKEINTRESOURCE(IDB_BITMAP1));
}else if( 0==wcscmp(pnmHTML->szTarget ,(LPCWSTR)L"phone")){
hBitmap = LoadBitmap( g_hInst, MAKEINTRESOURCE(IDB_BITMAP2));
}else{
hBitmap = LoadBitmap( g_hInst, MAKEINTRESOURCE(IDB_BITMAP3));
}

BITMAP bmp;
GetObject(hBitmap, sizeof(BITMAP), &bmp);

InlineImageInfo.dwCookie = pnmHTML->dwCookie;
InlineImageInfo.iOrigHeight = bmp.bmHeight;
InlineImageInfo.iOrigWidth = bmp.bmWidth;
InlineImageInfo.hbm = hBitmap;
InlineImageInfo.bOwnBitmap = FALSE;
SendMessage(m_hwndHtml,DTM_SETIMAGE,0,(LPARAM)&InlineImageInfo);

OutputDebugString(TEXT("NM_INLINE_IMAGE\r\n"));

return 1;
/*If you are handling image processing yourself for the
HTML Control, you must return a non-zero value from
NM_INLINE_IMAGE. Otherwise the HTMLControl will attempt
to load the images on it's own, which will override the
results from your NM_INLINE_IMAGE processing code.*/

break;
}

case NM_INLINE_SOUND:
{
OutputDebugString(TEXT("NM_INLINE_SOUND\r\n"));
break;
}

case NM_TITLE:
{
OutputDebugString(TEXT("NM_TITLE\r\n"));
break;
}

case NM_META:
{
OutputDebugString(TEXT("NM_META\r\n"));
break;
}

case NM_BASE:
{
OutputDebugString(TEXT("NM_BASE\r\n"));
break;
}

case NM_CONTEXTMENU:
{
OutputDebugString(TEXT("NM_CONTEXTMENU\r\n"));
break;
}

case NM_INLINE_XML:
{
OutputDebugString(TEXT("NM_INLINE_XML\r\n"));
break;
}

case NM_BEFORENAVIGATE:
{
OutputDebugString(TEXT("NM_BEFORENAVIGATE\r\n"));
break;
}

case NM_DOCUMENTCOMPLETE:
{
OutputDebugString(TEXT("NM_DOCUMENTCOMPLETE\r\n"));
break;
}

case NM_NAVIGATECOMPLETE:
{
OutputDebugString(TEXT("NM_NAVIGATECOMPLETE\r\n"));
break;
}

case NM_TITLECHANGE:
{
OutputDebugString(TEXT("NM_TITLECHANGE\r\n"));
break;
}

default:
{
ASSERT(FALSE);
break;
}
}//switch

DeleteObject(hBitmap);

break;
}

===========================================================
處理NM_INLINE_IMAGE時, 切記要return 一個非零的值, 否則圖片會一閃即逝!!

2008年1月16日 星期三

好爛的雞腿蛋包飯

今天中午吃的是雞腿蛋包飯,顧名思義是雞腿一支,蛋包飯一份。
開箱之後,經過清點,確認無誤。
內容物確實有配菜三樣,薯餅一塊,雞腿一支,蛋皮and炒飯各一,
各自放在自己的位置,蛋皮跟飯也很平整的一層一層放好,如下。

雞腿
====
蛋皮
====
炒飯

為啥我的蛋包飯,飯沒有被包住啊!!!
吃起來真空虛,一口炒飯一口蛋...

不過我也不是很計較,因為便當還算便宜。
一個便當 + 一小碗湯 + 一份水果(或飲料) = 55新台幣
每天還有5-6種搭配可以選擇,算是物超所值了。
以上是今天中午的午餐!!

2008年1月14日 星期一

工作超過一個星期 - 前2天 有被騙的感覺~~

正式工作到現在已經超過一個星期了,工作嘛,就是煩悶。

在正式脫離學生、死替代役的身份之後,邁入我人生的第一份正式工作--手機軟體工程師(聽起來還頗響亮,不錯不錯)。
不過第一天整個有被騙的感覺!
面試的時候本來說好是寫windows mobile的程式,結果到職第一天,就丟了一支Nokia的手機給我,叫我玩symbian。
玩了2天,我才提起勇氣,表明我的想法。因為我主要是怕之後被Nokia請到芬蘭寫程式,離家裡太遠。
不過主管人也很好,雖然看起來不願意,但也是接受了我的想法。第三天,我就開始玩windows mobile的程式。

== 待續 ==

2008年1月8日 星期二

Blog第一篇

脫離一年三個多月的替代役生活,終於把欠國家的債還完了。
開始邁入人生的另一個階段。
[這是補2008/1/1]