PAINT.C
资源名称:MSDN_VC98.zip [点击查看]
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:11k
源码类别:
Windows编程
开发平台:
Visual C++
- /**********************************************************************/
- /* */
- /* PAINT.C */
- /* */
- /* Copyright (c) 1995-1997 Microsoft Corporation */
- /* */
- /**********************************************************************/
- #include "windows.h"
- #include "imm.h"
- #include "resource.h"
- #include "imeapps.h"
- #define DEBUG 1
- void SetAttrColor(HDC hDC, BYTE bAttr)
- {
- switch (bAttr)
- {
- case ATTR_INPUT:
- SetTextColor(hDC,RGB(0,0,0));
- SetBkMode(hDC,TRANSPARENT);
- break;
- case ATTR_TARGET_CONVERTED:
- SetTextColor(hDC,RGB(255,255,255));
- SetBkMode(hDC,OPAQUE);
- SetBkColor(hDC,RGB(0,0,255));
- break;
- case ATTR_CONVERTED:
- SetTextColor(hDC,RGB(0,0,255));
- SetBkMode(hDC,TRANSPARENT);
- break;
- case ATTR_TARGET_NOTCONVERTED:
- SetTextColor(hDC,RGB(255,255,255));
- SetBkMode(hDC,OPAQUE);
- SetBkColor(hDC,RGB(0,255,0));
- break;
- case ATTR_INPUT_ERROR:
- SetTextColor(hDC,RGB(255,255,0));
- SetBkMode(hDC,TRANSPARENT);
- break;
- case ATTR_FIXEDCONVERTED:
- SetTextColor(hDC,RGB(255,0,0));
- SetBkMode(hDC,TRANSPARENT);
- break;
- default:
- SetTextColor(hDC,RGB(0,0,0));
- SetBkMode(hDC,TRANSPARENT);
- break;
- }
- }
- LRESULT HandlePaint(HWND hWnd,WPARAM wParam, LPARAM lParam)
- {
- HDC hDC;
- PAINTSTRUCT ps;
- UINT i;
- int x = ORG_X;
- int y = ORG_Y;
- SIZE sz;
- HFONT hOldFont = 0;
- HFONT hDefFont = GetStockObject(DEFAULT_GUI_FONT);
- int height,defheight;
- const char szResult[] = "Result String";
- const char szComp[] = "Composition String";
- RECT rc;
- GetClientRect(hWnd,&rc);
- hDC = BeginPaint(hWnd, &ps);
- if (hFont)
- hOldFont = SelectObject(hDC,hDefFont);
- // Get the height of the default gui font.
- GetTextExtentPoint(hDC,"A",1,&sz);
- defheight = sz.cy + 1;
- // Get the height of the font.
- SelectObject(hDC,hFont);
- GetTextExtentPoint(hDC,"A",1,&sz);
- height = sz.cy + 1;
- SelectObject(hDC,hDefFont);
- SetTextColor(hDC,RGB(0,0,0));
- SetBkMode(hDC,TRANSPARENT);
- TextOut(hDC,ORG_X,y,szResult,lstrlen(szResult));
- y += defheight;
- if (Mylstrlen(szPaintResult))
- {
- x = ORG_X;
- SelectObject(hDC,hFont);
- SetTextColor(hDC,RGB(255,0,0));
- SetBkMode(hDC,TRANSPARENT);
- #ifdef USEWAPI
- TextOutW(hDC,x,y,szPaintResult,Mylstrlen(szPaintResult));
- #else
- TextOut(hDC,x,y,szPaintResult,Mylstrlen(szPaintResult));
- #endif
- }
- y += height;
- if (Mylstrlen(szPaintResultRead))
- {
- x = ORG_X;
- SelectObject(hDC,hFont);
- SetTextColor(hDC,RGB(255,0,0));
- SetBkMode(hDC,TRANSPARENT);
- #ifdef USEWAPI
- TextOutW(hDC,x,y,szPaintResultRead,Mylstrlen(szPaintResultRead));
- #else
- TextOut(hDC,x,y,szPaintResultRead,Mylstrlen(szPaintResultRead));
- #endif
- }
- #if 0
- if (dwResultReadStrLen)
- {
- x = ORG_X;
- SelectObject(hDC,hFont);
- SetTextColor(hDC,RGB(0,0,0));
- SetBkMode(hDC,TRANSPARENT);
- if (dwResultReadClsLen)
- {
- dwResultReadCls[127] = 0;
- i = 1;
- SetTextColor(hDC,RGB(255,0,0));
- while (dwResultReadCls[i] && dwResultReadCls[i-1] < dwResultReadStrLen)
- {
- DWORD dwTextLen = dwResultReadCls[i] - dwResultReadCls[i-1];
- LPSTR lpStart = szResultReadStr + dwResultReadCls[i-1];
- TextOut(hDC,x,y,lpStart,dwTextLen);
- GetTextExtentPoint(hDC,lpStart,dwTextLen,&sz);
- x += sz.cx;
- TextOut(hDC,x,y,",",1);
- GetTextExtentPoint(hDC,",",1,&sz);
- x += (sz.cx + 2);
- i++;
- }
- }
- else
- {
- SetTextColor(hDC,RGB(255,0,0));
- SetBkMode(hDC,TRANSPARENT);
- TextOut(hDC,x,y,szResultReadStr,dwResultReadStrLen);
- }
- }
- #endif
- y += height;
- SelectObject(hDC,hDefFont);
- SetTextColor(hDC,RGB(0,0,0));
- SetBkMode(hDC,TRANSPARENT);
- TextOut(hDC,ORG_X,y,szComp,lstrlen(szComp));
- y += defheight;
- if (dwCompStrLen)
- {
- x = ORG_X;
- SelectObject(hDC,hFont);
- SetTextColor(hDC,RGB(0,0,0));
- if (dwCompClsLen && dwCompAttrLen)
- {
- dwCompCls[127] = 0;
- i = 1;
- while (dwCompCls[i] && dwCompCls[i-1] < dwCompStrLen)
- {
- DWORD dwTextLen = dwCompCls[i] - dwCompCls[i-1];
- LPMYSTR lpStart = szCompStr + dwCompCls[i-1];
- SetAttrColor(hDC, bCompAttr[dwCompCls[i-1]]);
- #ifdef USEWAPI
- TextOutW(hDC,x,y,lpStart,dwTextLen);
- GetTextExtentPointW(hDC,lpStart,dwTextLen,&sz);
- #else
- TextOut(hDC,x,y,lpStart,dwTextLen);
- GetTextExtentPoint(hDC,lpStart,dwTextLen,&sz);
- #endif
- x += sz.cx;
- SetTextColor(hDC,RGB(0,0,0));
- SetBkMode(hDC,TRANSPARENT);
- #ifdef USEWAPI
- TextOutW(hDC,x,y,MYTEXT(","),1);
- GetTextExtentPointW(hDC,MYTEXT(","),1,&sz);
- #else
- TextOut(hDC,x,y,",",1);
- GetTextExtentPoint(hDC,",",1,&sz);
- #endif
- x += (sz.cx + 2);
- i++;
- }
- }
- else
- {
- SetBkMode(hDC,TRANSPARENT);
- #ifdef USEWAPI
- TextOutW(hDC,x,y,szCompStr,dwCompStrLen);
- #else
- TextOut(hDC,x,y,szCompStr,dwCompStrLen);
- #endif
- }
- }
- y += height;
- if (dwCompReadStrLen)
- {
- x = ORG_X;
- SelectObject(hDC,hFont);
- SetTextColor(hDC,RGB(0,0,0));
- SetBkMode(hDC,TRANSPARENT);
- if (dwCompReadClsLen && dwCompReadAttrLen)
- {
- dwCompReadCls[127] = 0;
- i = 1;
- while (dwCompReadCls[i] && dwCompReadCls[i-1] < dwCompReadStrLen)
- {
- DWORD dwTextLen = dwCompReadCls[i] - dwCompReadCls[i-1];
- LPMYSTR lpStart = szCompReadStr + dwCompReadCls[i-1];
- SetAttrColor(hDC, bCompReadAttr[dwCompReadCls[i-1]]);
- #ifdef USEWAPI
- TextOutW(hDC,x,y,lpStart,dwTextLen);
- GetTextExtentPointW(hDC,lpStart,dwTextLen,&sz);
- #else
- TextOut(hDC,x,y,lpStart,dwTextLen);
- GetTextExtentPoint(hDC,lpStart,dwTextLen,&sz);
- #endif
- x += sz.cx;
- SetTextColor(hDC,RGB(0,0,0));
- SetBkMode(hDC,TRANSPARENT);
- #ifdef USEWAPI
- TextOutW(hDC,x,y,MYTEXT(","),1);
- GetTextExtentPointW(hDC,MYTEXT(","),1,&sz);
- #else
- TextOut(hDC,x,y,",",1);
- GetTextExtentPoint(hDC,",",1,&sz);
- #endif
- x += (sz.cx + 2);
- i++;
- }
- }
- else
- {
- SetBkMode(hDC,TRANSPARENT);
- #ifdef USEWAPI
- TextOutW(hDC,x,y,szCompReadStr,dwCompReadStrLen);
- #else
- TextOut(hDC,x,y,szCompReadStr,dwCompReadStrLen);
- #endif
- }
- }
- y += height;
- ptImeUIPos.y = y;
- SelectObject(hDC,hOldFont);
- EndPaint(hWnd,&ps);
- return 1;
- }
- LRESULT HandleCandPaint(HWND hWnd,WPARAM wParam, LPARAM lParam)
- {
- HDC hDC;
- PAINTSTRUCT ps;
- UINT i;
- int x = ORG_X;
- int y = ORG_Y;
- SIZE sz;
- HFONT hOldFont = 0;
- HFONT hDefFont = GetStockObject(DEFAULT_GUI_FONT);
- int height,defheight;
- LPDWORD lpdwOffset;
- RECT rect;
- const char szCand[] = "Candidate List";
- const char szCandNull[] = "";
- const char szCandRead[] = "Reading";
- const char szCandCode[] = "Code";
- const char szCandMean[] = "Meaning";
- const char szCandRadi[] = "Radical";
- const char szCandStrk[] = "Stroke";
- GetClientRect(hWnd,&rect);
- hDC = BeginPaint(hWnd, &ps);
- if (!lpCandList)
- goto pt_cand_10;
- if (hFont)
- hOldFont = SelectObject(hDC,hDefFont);
- // Get the height of the default gui font.
- GetTextExtentPoint(hDC,"A",1,&sz);
- defheight = sz.cy + 1;
- // Get the height of the font.
- SelectObject(hDC,hFont);
- GetTextExtentPoint(hDC,"A",1,&sz);
- height = sz.cy + 1;
- SelectObject(hDC,hDefFont);
- SetTextColor(hDC,RGB(0,0,0));
- SetBkMode(hDC,TRANSPARENT);
- TextOut(hDC,ORG_X,y,szCand,lstrlen(szCand));
- y += defheight;
- switch (lpCandList->dwStyle)
- {
- case IME_CAND_READ:
- TextOut(hDC,ORG_X,y,szCandRead,lstrlen(szCandRead));
- break;
- case IME_CAND_CODE:
- TextOut(hDC,ORG_X,y,szCandCode,lstrlen(szCandCode));
- break;
- case IME_CAND_MEANING:
- TextOut(hDC,ORG_X,y,szCandMean,lstrlen(szCandMean));
- break;
- case IME_CAND_RADICAL:
- TextOut(hDC,ORG_X,y,szCandRadi,lstrlen(szCandRadi));
- break;
- case IME_CAND_STROKE:
- TextOut(hDC,ORG_X,y,szCandStrk,lstrlen(szCandStrk));
- break;
- default:
- break;
- }
- y += defheight;
- if (!lpCandList->dwCount)
- goto pt_cand_10;
- lpdwOffset = &lpCandList->dwOffset[0];
- lpdwOffset += lpCandList->dwPageStart;
- for (i = lpCandList->dwPageStart;
- (i < lpCandList->dwCount) &&
- (i < lpCandList->dwPageStart + lpCandList->dwPageSize) &&
- (y <= rect.bottom + height); i++)
- {
- LPSTR lpstr = (LPSTR)lpCandList + *lpdwOffset++;
- x = ORG_X;
- SelectObject(hDC,hFont);
- if (i != lpCandList->dwSelection)
- {
- SetTextColor(hDC,RGB(0,0,0));
- SetBkMode(hDC,TRANSPARENT);
- }
- else
- {
- SetTextColor(hDC,RGB(255,255,255));
- SetBkColor(hDC,RGB(0,0,255));
- SetBkMode(hDC,OPAQUE);
- }
- TextOut(hDC,x,y,lpstr,lstrlen(lpstr));
- y += height;
- }
- SelectObject(hDC,hOldFont);
- pt_cand_10:
- EndPaint(hWnd,&ps);
- return 1;
- }