/*-------------------------------
main.cpp - VS2010复制代码至word
中文乱码修正
-------------------------------*/
#include <windows.h>
#include <string.h>
#define IDC_BUTTON 1001 //按钮
#define IDC_SZKJIE 2001 //快捷键文字控件
#define IDC_SZZTL 3001 //状态栏文字控件
// 定时器与状态字
#define IDT_Timer 10 //定时器ID
#define STime 1000 //定时器间隔
#define ErrorData 20 //数据类型错误
#define ErrorMen 21 //内存分配错误
#define OpenError 30 //剪贴板打开失败
#define Success 31 //修复成功
#define Wait 50 //等待操作
// 剪贴板数据是否可修复标记
#define bData 1
#define bRepair 2
#define bData1 3
static TCHAR kjj[20];
UINT hotkeyid;
BOOL bhotkey;
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
UINT ClobalRepair (PTSTR pText,UINT iText,LPWSTR pTextU,UINT iTextU);
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName [] = TEXT ("VS2010Copy") ;
HWND hwnd ;
MSG msg ;
WNDCLASS wndclass ;
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (hInstance, TEXT("ICON")) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (LTGRAY_BRUSH) ;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = szAppName ;
if (!RegisterClass (&wndclass))
{
MessageBox (NULL, TEXT ("This program requires Windows NT!"),
szAppName, MB_ICONERROR) ;
return 0 ;
}
hwnd = CreateWindow (szAppName, TEXT ("VS2010复制中文乱码修正"),
//带关闭按钮,标题栏,系统菜单,不可调节大小
WS_OVERLAPPED | WS_SYSMENU | WS_CAPTION,
CW_USEDEFAULT, CW_USEDEFAULT,
0,0,
NULL, NULL, hInstance, NULL) ;
// 查找全局原子
hotkeyid = GlobalFindAtom(szAppName);
if (hotkeyid != 0)
bhotkey = FALSE;
else
{
// 添加全局原子
hotkeyid = GlobalAddAtom(szAppName);
// 注册CRTL+Q热键
if (RegisterHotKey(hwnd,hotkeyid,MOD_CONTROL,81))
bhotkey = TRUE;
else
bhotkey = FALSE;
}
if (bhotkey)
wsprintf(kjj,TEXT("快捷键 Ctrl + Q")) ;
else
wsprintf(kjj,TEXT("快捷键注册失败")) ;
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static HWND hwndBUTTON, hwndSZKJIE, hwndSZZTL, hwndNextViewer;
static HFONT hFont;
static int cxChar, cyChar, bGlobal, bZTZ;
POINT pt = {0,0};
HDC hdc;
PAINTSTRUCT ps ;
TEXTMETRIC tm ;
TCHAR szf[20];
HGLOBAL hGlobal = NULL , hMen = NULL, hMenT = NULL, hMenU = NULL;
PTSTR pText = NULL, pGlobal = NULL, pMen = NULL,
pTextT = NULL, pMenT = NULL;
UINT iFormt, iText, iTextT, iTextU;
LPWSTR pTextU = NULL, pMenU = NULL, pGlobalU = NULL;
switch (message)
{
case WM_CREATE :
hdc = GetDC (hwnd) ;
SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)) ;
GetTextMetrics (hdc, &tm) ; // 获取系统等宽字体信息
// 计算等宽字体大小,用于调整窗口和控件大小
cxChar = tm.tmAveCharWidth ;
cyChar = tm.tmHeight + tm.tmExternalLeading ;
ReleaseDC (hwnd, hdc) ;
MoveWindow (hwnd,150,200,52*cxChar/2,10*cyChar/2,TRUE);
// 创建一个按钮
hwndBUTTON = CreateWindow ( TEXT("button"), NULL,
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
cxChar/3, cyChar/6, 50*cxChar/2-1, 4*cyChar/2,
hwnd, (HMENU)IDC_BUTTON,
((LPCREATESTRUCT) lParam)->hInstance, NULL) ;
// 创建程序状态文字控件
hwndSZZTL = CreateWindow (TEXT("static"),NULL,
WS_CHILD | WS_VISIBLE | SS_CENTER,
cxChar/3,
(cyChar/6)+(4*cyChar/2)+1,
(50*cxChar/2-1)/2,
cyChar,hwnd,(HMENU)IDC_SZKJIE,
((LPCREATESTRUCT)lParam)->hInstance,NULL);
// 创建快捷键说明文字控件
hwndSZKJIE = CreateWindow (TEXT("static"),NULL,
WS_CHILD | WS_VISIBLE | SS_CENTER,
(cxChar/3)+((50*cxChar/2-1)/2)+1,
(cyChar/6)+(4*cyChar/2)+1,
(50*cxChar/2-1)-((50*cxChar/2-1)/2)-2,
cyChar,hwnd,(HMENU)IDC_SZKJIE,
((LPCREATESTRUCT)lParam)->hInstance,NULL);
// 建立 Microsoft Sans Serif 逻辑字体
hFont = CreateFont(15, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
GB2312_CHARSET, NULL, NULL, NULL, NULL, TEXT("Microsoft Sans Serif")) ;
// 向控件发送WM_SETFONT消息,使其更换字体
SendMessage(hwndBUTTON,WM_SETFONT,(WPARAM)hFont,TRUE);
wsprintf(szf,TEXT("修正乱码")) ;
SetWindowText (hwndBUTTON, szf) ;
SendMessage(hwndSZZTL,WM_SETFONT,(WPARAM)hFont,TRUE);
SendMessage(hwndSZKJIE,WM_SETFONT,(WPARAM)hFont,TRUE);
// 使文字控件无效,令其重绘,得以拦截WM_CTLCOLORSTATIC消息
InvalidateRect (hwndSZZTL, NULL, TRUE);
InvalidateRect (hwndSZKJIE, NULL, TRUE);
// 将程序注册为剪贴板浏览器,以观察剪贴板变动
hwndNextViewer = SetClipboardViewer (hwnd) ;
// 注册富文本格式类型
iFormt = RegisterClipboardFormat("Rich Text Format");
// 打开剪贴板,如果成功返回非零
if (OpenClipboard (hwnd))
{
bGlobal = bData;
// 取得剪贴板的RTF内存块句柄
hGlobal = GetClipboardData (iFormt) ;
if (hGlobal == NULL)
{
bGlobal = ErrorData;
bZTZ = ErrorData;
CloseClipboard();
}
else
{
hGlobal = GetClipboardData (CF_TEXT);
if (hGlobal == NULL)
{
bGlobal = ErrorData;
bZTZ = ErrorData;
CloseClipboard();
}
else
{
hGlobal = GetClipboardData(CF_UNICODETEXT);
if (hGlobal == NULL)
{
bGlobal = ErrorData;
bZTZ = ErrorData;
CloseClipboard();
}
else
{
bZTZ = Wait;
CloseClipboard();
}
}
}
}
else
{
bZTZ = OpenError;
bGlobal = OpenError;
}
SetTimer(hwnd,IDT_Timer,STime,NULL);
return 0 ;
case WM_CTLCOLORSTATIC :
// 消息的lParam参数,是控件的句柄
// if ((HWND)lParam == hwndSZZTL)
// {
// 改变状态栏文字控件的文字颜色
SetTextColor((HDC)wParam,RGB(44,79,109));
// }
// else
// {
// 改变快捷键文字控件的文字颜色
// SetTextColor((HDC)wParam,RGB(96,50,109));
// }
// 背景采用COLOR_BTNFACE 按钮的背景颜色,并返回画刷给控件
SetBkColor ((HDC)wParam, GetSysColor(COLOR_BTNFACE));
return (LONG)CreateSolidBrush(GetSysColor(COLOR_BTNFACE));
// 拦截鼠标命中消息
case WM_NCHITTEST :
// 将消息中的鼠标屏幕坐标转换到客户区坐标
pt.x = LOWORD (lParam);
pt.y = HIWORD (lParam);
ScreenToClient (hwnd,&pt);
// 判断区域,更改文字
if ((pt.x < ((cxChar/3)+((50*cxChar/2-1)/2)+1) ||
pt.x > ((((cxChar/3)+((50*cxChar/2-1)/2)+1)))+
((50*cxChar/2-1)-((50*cxChar/2-1)/2)-2)) ||
( pt.y < ((cyChar/6)+(4*cyChar/2)+1) ) ||
pt.y > ((cyChar/6)+(4*cyChar/2)+1)+cyChar)
{
SetWindowText (hwndSZKJIE, kjj) ;
}
else
{
wsprintf(szf,TEXT("TypeCool-CSDN")) ;
SetWindowText (hwndSZKJIE, szf) ;
}
break ;
// 观察剪贴板变化
case WM_DRAWCLIPBOARD :
if (hwndNextViewer)
SendMessage(hwndNextViewer,message, wParam, lParam) ;
if(bGlobal == bRepair)
{
bGlobal = bData1; // 剪贴板数据被程序修复
return 0;
}
// 剪贴板数据更新
if (bGlobal == ErrorData || bGloba
VS2010CopyModify.rar
5星 · 超过95%的资源 需积分: 9 154 浏览量
2010-11-15
06:42:30
上传
评论 1
收藏 30KB RAR 举报
TypeCool
- 粉丝: 58
- 资源: 30
最新资源
- alu.v
- H21-282学习参考.pdf
- QuestionTwo.java
- QuestionOne.java
- AWS Certified Solutions Architect Study Guide -SAA-C03 .docx
- 校园小情书微信小程序源码 社区小程序前后端开源 校园表白墙交友小程序.rar
- OA办公自动化管理系统(Struts1.2+Hibernate3.0+Spring2+DWR).rar
- 简历-求职简历-word-文件-简历模版免费分享-应届生-高颜值简历模版-个人简历模版-简约大气-大学生在校生-求职-实习
- 南京邮电大学数学实验:熟练掌握 Matlab 软件的基本命令和操作
- 简历-求职简历-word-文件-简历模版免费分享-应届生-高颜值简历模版-个人简历模版-简约大气-大学生在校生-求职-实习
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论5