⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uisub.c

📁 这是一个编写输入法程序的代码。演示了怎样利用输入法接口。
💻 C
字号:
//除uiWnd外所有窗口处理
//提示信息显示在编码窗口中
//输入法创建的所有窗口(不含对话框)都应该是WS_DISABLE的,也就是说不能响应鼠标消息
//为了响应鼠标消息需要在WM_SETCURSOR中获取鼠标按钮状态来模拟
#include "imesample.h"

BOOL WINAPI AboutDialogProc(HWND hWnd ,	UINT message ,WPARAM wParam ,LPARAM lParam )
{

	switch(message) {
	case WM_INITDIALOG:
		{
			Helper_CenterWindow(hWnd);
		}
		return TRUE;
	case WM_COMMAND: 
		switch(wParam) { 
			break;
		case IDOK:
		case IDCANCEL:
			EndDialog(hWnd,TRUE);
			break;
		default:
			return FALSE;
			break;
		}
		break;
	default:
		return FALSE;
		break;
	}
	return TRUE;
}

LRESULT WINAPI InputWndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
	LRESULT lRet=0;
	switch(message)
	{
	case WM_CREATE:
		{
			RECT rc;
			GetClientRect(hWnd,&rc);
			rc.left+=10;
			rc.bottom/=2;
			CreateWindow(CLSNAME_COMP,NULL,WS_CHILD|WS_VISIBLE,rc.left,rc.top,rc.right-rc.left,rc.bottom-rc.top,hWnd,(HMENU)0,g_hInst,NULL);
			OffsetRect(&rc,0,rc.bottom);
			CreateWindow(CLSNAME_CAND,NULL,WS_CHILD|WS_VISIBLE,rc.left,rc.top,rc.right-rc.left,rc.bottom-rc.top,hWnd,(HMENU)0,g_hInst,NULL);
		}
		break;
	case WM_PAINT:
		{
			PAINTSTRUCT ps;
			HDC hdc=BeginPaint(hWnd,&ps);
			RECT rc;
			HBRUSH hr=CreateSolidBrush(RGB(255,0,0));
			GetClientRect(hWnd,&rc);
			rc.right=rc.left+10;
			FillRect(hdc,&rc,hr);
			DeleteObject(hr);
			EndPaint(hWnd,&ps);
		}
		break;
	default:
		if(!Helper_IsIMEMessage(message))
			lRet=DefWindowProc(hWnd,message,wParam,lParam);
		break;
	}
	return lRet;
}

LRESULT WINAPI CandWndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
	LRESULT lRet=0;
	switch(message)
	{
	case WM_PAINT:
		{
			PAINTSTRUCT ps;
			HDC hdc=BeginPaint(hWnd,&ps);
			RECT rc;
			GetClientRect(hWnd,&rc);
			FillRect(hdc,&rc,GetStockObject(DKGRAY_BRUSH));
			TextOut(hdc,0,0,"Cand",4);
			EndPaint(hWnd,&ps);
		}
		break;
	default:
		if(!Helper_IsIMEMessage(message))
			lRet=DefWindowProc(hWnd,message,wParam,lParam);
		break;
	}
	return lRet;
}

LRESULT WINAPI CompWndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
	LRESULT lRet=0;
	switch(message)
	{
	case WM_PAINT:
		{
			PAINTSTRUCT ps;
			HDC hdc=BeginPaint(hWnd,&ps);
			RECT rc;
			HWND hUIWnd=GetWindow(GetParent(hWnd),GW_OWNER);
			HIMC hIMC=(HIMC)GetWindowLong(hUIWnd,IMMGWL_IMC);
			LPINPUTCONTEXT lpIMC=(LPINPUTCONTEXT)ImmLockIMC(hIMC);
			GetClientRect(hWnd,&rc);
			FillRect(hdc,&rc,GetStockObject(GRAY_BRUSH));
			if(lpIMC)
			{
				LPCOMPOSITIONSTRING lpCompStr=(LPCOMPOSITIONSTRING)ImmLockIMCC(lpIMC->hCompStr);
				if(lpCompStr)
				{
					LPCTSTR pComp=GETLPCOMPSTR(lpCompStr);
					TextOut(hdc,0,1,pComp,lpCompStr->dwCompStrLen);
					ImmUnlockIMCC(lpIMC->hCompStr);
				}
				ImmUnlockIMC(hIMC);
			}
			EndPaint(hWnd,&ps);
		}
		break;
	default:
		if(!Helper_IsIMEMessage(message))
			lRet=DefWindowProc(hWnd,message,wParam,lParam);
		break;
	}
	return lRet;
}

void UIStatus_OnPaint(HWND hWnd,HDC hdc)
{
	RECT rc;
	//pic box
	GetClientRect(hWnd,&rc);
	Rectangle(hdc,rc.left,rc.top,rc.right,rc.bottom);
	DrawText(hdc,"IME编程模板",-1,&rc,DT_CENTER|DT_VCENTER|DT_SINGLELINE);
	TextOut(hdc,1,1,"?",1);
}

LRESULT WINAPI StatusWndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
	LRESULT lRet=0;
	switch(message)
	{
	case WM_PAINT:
		{
			PAINTSTRUCT ps;
			HDC hdc=BeginPaint(hWnd,&ps);
			UIStatus_OnPaint(hWnd,hdc);
			EndPaint(hWnd,&ps);
			lRet=1;
		}
		break;
	case WM_SETCURSOR:
		{//模拟鼠标消息
			POINT pt;
			GetCursorPos(&pt);
			ScreenToClient(hWnd,&pt);
			SendMessage(hWnd,HIWORD(lParam),0,MAKELONG(pt.x,pt.y));
		}
		break;
	case WM_LBUTTONDOWN:
		{
	       DialogBox(g_hInst, MAKEINTRESOURCE(IDD_ABOUT), GetActiveWindow(), (DLGPROC)AboutDialogProc);
		}
		break;
	default:
		lRet=DefWindowProc(hWnd,message,wParam,lParam);
		break;
	}
	return lRet;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -