精华内容
下载资源
问答
  • https://docs.microsoft.com/en-us/visualstudio/vsto/walkthrough-adding-controls-to-a-worksheet-at-run-time-in-vsto-add-in-project?view=vs-2019
    展开全文
  • Java数组倒置 简单 Java图片加水印,支持旋转和透明度设置 摘要:Java源码,文件操作,图片水印 util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印...
  • C#开发Word控件

    万次阅读 2017-05-10 18:54:53
    简介本文简要描述了利用C#开发一个Word插件的流程方法。实现一个简单的发送邮件的功能。如下图所示:点击发送邮件按钮,则将文本内容发送到邮箱。新建工程切换到Visual C#,选择office,可以看到office下面有2010和...

    简介

    本文简要描述了利用C#开发一个Word插件的流程方法。实现一个简单的发送邮件的功能。如下图所示:


    这里写图片描述

    点击发送邮件按钮,则将文本内容发送到邮箱。

    新建工程

    切换到Visual C#,选择office,可以看到office下面有2010和2007两个版本,为了兼容2007,这里选择2007版本。在工程选项里选择Word 2007 Addin,工程名字填写 SendEmail。工程路径设置成合适的位置。这里还可以在最上面设置.NET Frameword的版本,这里用默认的版本,大家可以根据实际需要选择其他版本。如下图所示:


    新建工程

    点击OK。

    工程文件解析

    新建工程后,会看到如下的工程视图:


    工程文件

    可以看到工程中有三个(逻辑上的)文件夹,Properties里存放的是应用的资源和配置,References里是工程中所有引入的库,展开后可以看到很多库是关于Office的。Word下面则是我们需要的文件。在这里仅有一个文件ThisAddIn.cs,打开它,代码如下(略去无关部分):

    //...
    namespace SendEmail
    {
        public partial class ThisAddIn
        {
            private void ThisAddIn_Startup(object sender, System.EventArgs e)
            {
            }
    
            private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
            {
            }
    
            // ...
    }

    可以看到ThisAddIn类和它的两个方法ThisAddIn_Startup()ThisAddIn_Shutdown()ThisAddIn这个类是VS创建的,用来和Office程序(Word)通信。这个类对象的初始化发生在Office程序加载控件的时候。它的基类是AddIn。

    ThisAddIn_Startup()在控件加载完成时调用,我们可以在这个方法里写自己的初始化代码。
    ThisAddIn_Shutdown()在控件销毁时调用,我们可以在这个方法理写自己的销毁代码。

    为了测试这两个方法,在这两个函数里增加一些代码,分别弹出两条信息:

    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        System.Windows.Forms.MessageBox.Show("Addin startup");
    }
    
    private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
    {
        System.Windows.Forms.MessageBox.Show("Addin shutdown");
    }

    ThisAddIn_StartupThisAddIn_Shutdown中弹出对话框是非常不好的,这里只是为了演示。实际开发中不应该这样做。另外,时间比较长的初始化操作也不宜放在这里,会影响Word的启动速度。

    测试程序

    运行程序之前,我们需要设置需要绑定到调试器的EXE,右键工程->在弹出菜单里选择属性,打开属性页,切换到Debug项,选中Start external program:,找到自己机器上安装的Word路径,Ctrl+S保存。如下图所示:


    这里写图片描述

    F5调试运行。可以看到在启动和退出Word时,会弹出消息。
    调试结束后删除ThisAddIn_Startup()ThisAddIn_Shutdown()中的代码。

    添加界面

    现在这个插件还没有界面,接下来我们需要增加界面。
    工程右键,Add,New Item,或者(Ctrl+Shift+A),弹出新加项目对话框,选择Ribbon(Visual Designer),Name填写RibbonEmail.cs,点击Add按钮。如下图所示:


    添加Ribbon文件

    添加新项目后,项目视图如下所示:


    这里写图片描述

    可以看到工程中多了三个文件,RibbonEmail.cs、RibbonEmail.Email.Designer.cs和SendEmail_TemporaryKey.pfx。SendEmail_TemporaryKey.pfx是给程序集签名用的,我们这里不讨论。RibbonEmail.Email.Designer.cs是由窗体设计器生成和维护的,用来放置生成界面的代码,一般我们不用理睬。RibbonEmail.cs是放置处理Ribbon事件代码的文件,我们的代码逻辑便放在此文件中,这个文件可以通过两种方式打开:View Code和View Designer,鼠标右键点击这个文件就可以看到这两个选项。选择View Designer会打开设计界面,我们在这里拖拽控件,设置控件属性和事件。View Code则会打开代码编辑器,我们在这里编写代码逻辑。现在这里仅有一个方法RibbonEmail_Load,这是VS自动生成的代码,Ribbon加载时会调用此函数,可以在这个函数里写初始化代码。现在以Designer视图打开 RibbonEmail.cs。可以看到设计器已经为我们生成了一个Ribbon界面,包括一个RibbonTab和一个RibbonGroup。
    RibbonTab是一个包含了一个或多个RibbonGroup的控件。
    RibbonGroup用来将控件分组,可以将任意多个控件放置在一个RibbonGroup中。

    F5运行程序,可以看到,我们的控件已经加载到Word的Ribbon区域了。如下图所示:


    这里写图片描述

    调整控件位置

    从上面截图中我们可以看到RibbonTab的位置出现在了最后面,Tab标签为加载项。我们可以通过RibbonTab的属性将其设置到任何位置。打开RibbonTab属性页,可以看到ControlId属性。ControlId控制着Tab的位置,其中又有两个子属性,ControlIdType和OfficeId。ControlIdType可以为Office或者Custom,Office表示我们的页签需要放在Office提供的页签中。Custom则为我们自定义的页签。这里选择Office。OfficeId表示Office提供的页签的Id,关于这个Id的说明,可以下载官方的ID文档查看。这里我们填写TabHome,表示我们要将我们的控件加到开始页签中。

    F5运行程序,我们的空间已经在开始页签中了。不过RibbonGroup还是在最后面。

    可以通过RibbonGroup的Position属性改变其位置。Position属性描述控件出现的位置,有三个可选值,Default,BeforeOfficeId,AfterOfficeId。Default表示放在最后。BeforeOfficeId表示放在某个控件之前。AfterOfficeId表示放在某个控件之后。这里我们选择BeforeOfficeId。OfficeId则为某个控件的Id,仍然可以在官方的ID文档中查找。这里我们填写GroupClipboard,表示放在剪贴板前面。

    再次运行程序,我们的RibbonGroup已经在开始页签的最前面了。如下如所示:


    这里写图片描述

    添加按钮,处理事件

    添加按钮很简单,只需要在工具栏中拖拽Button到Group中就可以了。在按钮的属性页将按钮的Label属性改为发送邮件,name属性改为sendEmail。如下图所示:


    这里写图片描述

    切换到事件页签,双击Click右边的输入框,则会自动创建事件处理器,并跳转到相应的代码。如下图所示:

    这里写图片描述

    接下来就是处理发送邮件的代码逻辑了。完整代码如下:

    private void sendEmail_Click(object sender, RibbonControlEventArgs e)
            {
                // 获取当前文档文本
                string text = Globals.ThisAddIn.Application.ActiveDocument.Content.Text;
    
                // 创建消息对象,四个参数为from,to,subject,body
                System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage(
                    "comaxy@126.com", "comaxy@126.com", "From Word", text);
                // 创建Smtp客户端,参数为SMTP服务器和端口
                System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient("smtp.126.com", 25);
                // 设置凭证,参数为用户名和密码
                client.Credentials = new System.Net.NetworkCredential("comaxy@126.com", "password");
                // 异步发送邮件,第一个参数为消息,第二个参数为发送成功后调用的对象,这里设置为null
                client.SendAsync(message, null);
            }

    总结

    本篇文章讲述了如何利用C#开发Word插件的基本流程。有错误的地方欢迎大家指正。

    展开全文
  • 为空白窗体添加控件

    2018-09-08 16:36:59
    //定义按钮标识符是指定一个唯一的整数值标识按钮对象,数字要不一样,名称自己定义,一般的做法是在程序的头部用define语句声明一个宏常量 #define IDC_MAIN_BUTTON 101 // 按钮标识符 #define IDC_MAIN_EDIT 102...
    #include <windows.h>
    
    //定义按钮标识符是指定一个唯一的整数值标识按钮对象,数字要不一样,名称自己定义,一般的做法是在程序的头部用define语句声明一个宏常量
    #define IDC_MAIN_BUTTON	101			// 按钮标识符
    #define IDC_MAIN_EDIT	102			// 编辑框标识符
    HWND hEdit;
    
    LRESULT CALLBACK WinProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam);
    
    int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR lpCmdLine,int nShowCmd)
    {   //注册窗体类
    	WNDCLASSEX wClass;
    	ZeroMemory(&wClass,sizeof(WNDCLASSEX));
    	wClass.cbClsExtra=NULL;
    	wClass.cbSize=sizeof(WNDCLASSEX);
    	wClass.cbWndExtra=NULL;
    	wClass.hbrBackground=(HBRUSH)COLOR_WINDOW;
    	wClass.hCursor=LoadCursor(NULL,IDC_ARROW);
    	wClass.hIcon=NULL;
    	wClass.hIconSm=NULL;
    	wClass.hInstance=hInst;
    	wClass.lpfnWndProc=(WNDPROC)WinProc;
    	wClass.lpszClassName="Window Class";
    	wClass.lpszMenuName=NULL;
    	wClass.style=CS_HREDRAW|CS_VREDRAW;
    
    	if(!RegisterClassEx(&wClass))
    	{
    		int nResult=GetLastError();
    		MessageBox(NULL,
    			"注册窗体类失败\r\n",
    			"窗体类失败",
    			MB_ICONERROR);
    	}
    
    	//创建窗体
    	HWND hWnd=CreateWindowEx(NULL,
    			"Window Class",
    			"为窗体添加控件......",
    			WS_OVERLAPPEDWINDOW,
    			200,
    			200,
    			640,
    			480,
    			NULL,
    			NULL,
    			hInst,
    			NULL);
    
    	if(!hWnd)
    	{
    		int nResult=GetLastError();
    
    		MessageBox(NULL,
    			"创建窗体失败过程发生错误\r\n",
    			"创建窗体失败",
    			MB_ICONERROR);
    	}
    
    	//显示窗体
        ShowWindow(hWnd,nShowCmd);
    
    	//处理消息
    	MSG msg;
    	ZeroMemory(&msg,sizeof(MSG));
    
    	while(GetMessage(&msg,NULL,0,0))
    	{
    		TranslateMessage(&msg);
    		DispatchMessage(&msg);
    	}
    
    	return 0;
    }
    
    //回调函数
    LRESULT CALLBACK WinProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
    {
    	switch(msg)
    	{
    		case WM_CREATE:
    //当一个程序创建窗体时,WM_CREATE消息会被触发,当希望做一些程序初始化工作时,可以把代码放到WM_CREATE消息处理逻辑中。
    //简单地说,本来是创建一个空白的窗体,可我不想这样,我想创建一个有内容的窗体,那你可以把你想在窗体刚刚打开时候想展示的东西的代码写进这个消息处理逻辑中
    //额外附加:WM_CREATE是windows中一个窗口消息。当一个应用程序通过CreateWindowEx函数或者CreateWindow函数请求创建窗口时发送此消息,(此消息在函数返回之前发送)。
    //产生时间是窗口创建之后显示之前,同时WM_CREATE也必须是不进队列消息。
    //例如,当要获取系统的字体时,我们可以先向这个窗口发送 WM_CREATE消息,以后字体不会改变了,程序会保存这个系统字体的消息!以后就可以用这个字体了!
    		{
    			// 创建一个编辑框
    			hEdit=CreateWindowEx(WS_EX_CLIENTEDGE,//编辑框四周立体边框
    				"EDIT",               //编辑框类型,BUTTON和EDIT都是Win32API内置的预定义的类型
    				"",   //也可以在此处设置初始文本,就是框里面显示的文字
    				WS_CHILD|WS_VISIBLE|
    				ES_MULTILINE|ES_AUTOVSCROLL|ES_AUTOHSCROLL,          //参考https://msdn.microsoft.com/zh-cn/library/czada357.aspx
    				30,  //横坐标
    				30,  //纵坐标
    				200, //宽
    				100,  //高
    				hWnd,
    				(HMENU)IDC_MAIN_EDIT,  //IDC_MAIN_EDIT编辑框的标识符,前面已定义了;(HMENU)是菜单句柄,在WinDef.h中定义。
    				GetModuleHandle(NULL),             //GetModuleHandle函数的作用是返回指定模块名的句柄,如果为NULL,则返回本模块的句柄。
    				NULL);
    
    			HGDIOBJ hfDefault=GetStockObject(DEFAULT_GUI_FONT);//设置字体
    			SendMessage(hEdit,
    				WM_SETFONT,             //当绘制文本时程序发送此消息得到控件要用的颜色
    				(WPARAM)hfDefault,
    				MAKELPARAM(FALSE,0));
    
    //如果想一开始在编辑框显示点什么,可以用SendMessage()函数产生一条窗体消息,当然你也可以在前面第三个参数设置初始文本
    //函数原型:LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam)
    //更多参考https://blog.csdn.net/lunkay/article/details/50519685
    			SendMessage(hEdit,
    				WM_SETTEXT,     //设置窗体文本消息,对于编辑框(Edit)来说,此消息字符串用于设置文本框内容
    				NULL,
    				(LPARAM)"用户在这里输入文本并编辑...");
    
    
    			// 创建一个按钮,也可以像文本框一样在开头声明HWND hWndButton
    			HWND hWndButton=CreateWindowEx(NULL,                      //第一个参数表示窗体(按钮)的扩展风格,设置为NULL
    				"BUTTON",               //窗体类型,按钮
    				"确定",                  //指向窗体(按钮)标题的指针
    				WS_TABSTOP|WS_VISIBLE|              //参考https://msdn.microsoft.com/zh-cn/library/czada357.aspx
    				WS_CHILD|BS_DEFPUSHBUTTON,
    				50,
    				150,//大于130,因为前面有个文本框,30+100,所以这个按钮的纵坐标要大于130,要不会重叠
    				100,
    				24,
    				hWnd,               //设置父窗口的句柄
    				(HMENU)IDC_MAIN_BUTTON,//按钮的标识符
    				GetModuleHandle(NULL),          //对于按钮不是必须的,可设为NULL
    				NULL);                       //对于按钮不是必须的,可设为NULL
    
    			SendMessage(hWndButton,
    				WM_SETFONT,
    				(WPARAM)hfDefault,
    				MAKELPARAM(FALSE,0));                      //makelparam和makewparam都是一样的 将两个word型合并成一个dword型。一个在高16位,一个在低16位
    		}
    		break;
    
    		case WM_COMMAND:               //WM_COMMAND,程序代码,在窗口菜单程序中使用。 //窗口菜单 或子窗口控件产生的消息
    			switch(LOWORD(wParam))        //LOWORD(wParam):菜单id
                {
    				case IDC_MAIN_BUTTON:            //点击了这个按钮会干嘛
    				{
    					char buffer[256];
    					SendMessage(hEdit,
    						WM_GETTEXT,         //应用程序发送此消息来复制对应窗口的文本到缓冲区
    						sizeof(buffer)/sizeof(buffer[0]),
    						reinterpret_cast<LPARAM>(buffer));
    // reinterpret_cast    C++里的强制类型转换符。
    //reinterpret_cast<type-id> (expression)
    //type-id 必须是一个指针、引用、算术类型、函数指针或者成员指针。它可以把一个指针转换成一个整数,也可以把一个整数转换成一个指针(先把一个指针转换成一个整数,再把该整数转换成原类型的指针,还可以得到原先的指针值)。
    					MessageBox(NULL,             //窗口句柄
    						buffer,                    //消息框内显示的文本消息
    						"信息提示",          //消息框的标题
    						MB_ICONINFORMATION);        //消息提示图标
    				}
    				break;
    			}
    			break;
    
    		case WM_DESTROY:
    		{
    			PostQuitMessage(0);
    			return 0;
    		}
    		break;
    	}
    
    	return DefWindowProc(hWnd,msg,wParam,lParam);
    }

     

    效果:

    在里面输入漫步云端

    然后点击确定

    展开全文
  • word动画控件

    2013-03-29 15:22:41
    word中播放gif格式图片 1、解压缩。 2、复制文件“AniGIF.ocx”到“\windows\system32\”文件夹下。 3、打开“Word选项”-->“常用”...6、如果是Word 2003,请从视图菜单下选择“工具栏→控件工具箱”,再添加即可。
  • // 调相应的按钮事件 if (nkeyDown == 79 && nkeyState) // 79是字母O的ASCII码值 OnBnClickedBtOnoff(); } return CDialog::PreTranslateMessage(pMsg); } /*======================================...

    首先在类视图中找到要响应的窗口类,然后右键-->属性-->重写中找到PreTranslateMessage,如下图所示:

     

     

    接着,在PreTranslateMessage()函数中判断键值,并响应事件:

    BOOL CSerialPortDlg::PreTranslateMessage(MSG* pMsg)
    {
    	//先判断是否是键盘输入消息
    	if (pMsg->message == WM_KEYDOWN) 
    	{
    		int nkeyDown = pMsg->wParam;
    		SHORT nkeyState = GetKeyState(VK_CONTROL); // ctrl键的状态获取
    		
    		if (nkeyDown == 83 && nkeyState) // 83是S的ASCII码值,代表键盘S键
    			OnBnClickedBtSenddata(); // 调相应的按钮事件
    
    		if (nkeyDown == 79 && nkeyState) // 79是字母O的ASCII码值
    			OnBnClickedBtOnoff();
    	}	
    
    	return CDialog::PreTranslateMessage(pMsg);
    }

    /*==============================================================================================*/

                                            重要API:GetKeyState

    /*==============================================================================================*/

     

    对键盘消息的处理有一个重要的API:GetKeyState()

    ①函数原型:

        SHORT GetKeyState(int nVirtKey);

    ②参数:

        nVrtKey:键值。若要求的虚拟键是字母或数字(A~Z,a~z或0~9),nVirtKey必须被置为相应字符的ASCII码值,对于其他的键,nVirtKey必须是一虚拟键码。若使用非英语键盘布局,则取值在ASCIIa~z和0~9的虚拟键被用于定义绝大多数的字符键。例如,对于德语键盘格式,值为ASCII0(OX4F)的虚拟键指的是"0"键,而VK_OEM_1指"带变音的0键"。

    ③返回值:
        返回值给出了给定虚拟键的状态,状态如下:
        (a)若高序位为1,则键处于DOWN状态,否则为UP状态。

            如:BYTE Caps_Lock = LOBYTE(GetKeyState(VK_CAPITAL));  if (Caps_Lock)来判断指示灯亮与灭。
        (b)若低序位为1,则键被触发。例如CAPS LOCK键,被找开时将被触发。若低序位置为0,则键被关闭,且不被触发。触发键在键盘上的指示灯,当键被触发时即亮,键不被触发时即灭。

            如:BYTE Num_Lock = HIBYTE(GetKeyState(VK_CAPTITAL));  if (Num_Lock)来判断按下和弹起状态。

    ④使用方法:

        (a)判断指示灯亮灭用LOBYTE(GetKeyState());

        (b)判断键按下与弹起用HIBYTE(GetKeyState())

    ⑤说明:

         (a)此函数只能在PreTranslateMessage消息中响应,不能在WM_KEYDOWN和WM_CHAR消息中响应。

         (b) 指示灯亮灭主要用于NumLock键和CapsLock键。即数字键盘开关和大小写切换。

         (c)键按下与弹起可使用与任何键,比如Shift和Ctrl键等。

    ⑥代码示例:

    BOOL CSerialPortDlg::PreTranslateMessage(MSG* pMsg)
    {
    	switch ( pMsg->message )
    	{
    	case WM_KEYDOWN: // 键按下
    		if (pMsg->wParam == 'C')
    		{
    			if ( !LOBYTE(GetKeyState(20)) ) // 20:CapsLock键
    			{
    				if ( HIBYTE(GetKeyState(16)) )
    					MessageBox("键按下,Caps指示灯灭时同时按住Shift键和C键,输入大写C");
    				else
    					MessageBox("键按下,Caps指示灯灭时,按下C键,输入小写c");
    			}
    		}
    		break;
    
    	case WM_KEYUP: // 键弹起
    		if (pMsg->wParam == 'B')
    		{
    			if ( LOBYTE(GetKeyState(20)) )
    				MessageBox("键弹起,输入大写B");
    			else
    				MessageBox("键弹起,输入小写b");
    		}
    		break;
    
    	case WM_LBUTTONDOWN: // 鼠标左键按下
    		if ( LOBYTE(GetKeyState(20)) )
    			MessageBox("Caps指示灯亮,且鼠标左键按住");
    		break;
    
    	case WM_MOUSEWHEEL: // 鼠标滚轮
    		MessageBox("鼠标滚轮");
    		break;
    
    	default:
    		break;
    	}//switch
    }

     

    /*==============================================================================================*/

                                                     键值

    /*==============================================================================================*/

    键盘键值如下图所示:

     

    OK,接下来看看VS键的宏定义:

    #ifndef NOVIRTUALKEYCODES
    
    /*
     * Virtual Keys, Standard Set
     */
    #define VK_LBUTTON        0x01	// 鼠标左键
    #define VK_RBUTTON        0x02	// 鼠标右键
    #define VK_CANCEL         0x03	// CANCEl键
    #define VK_MBUTTON        0x04    /* NOT contiguous with L & RBUTTON */ // 鼠标中键
    
    #if(_WIN32_WINNT >= 0x0500)
    #define VK_XBUTTON1       0x05    /* NOT contiguous with L & RBUTTON */
    #define VK_XBUTTON2       0x06    /* NOT contiguous with L & RBUTTON */
    #endif /* _WIN32_WINNT >= 0x0500 */
    
    /*
     * 0x07 : unassigned
     */
    
    #define VK_BACK           0x08	// BackSpace退格键
    #define VK_TAB            0x09	// Tab键
    
    /*
     * 0x0A - 0x0B : reserved
     */
    
    #define VK_CLEAR          0x0C	// Clear键
    #define VK_RETURN         0x0D	// 回车键(Enter键,非小键盘)
    
    #define VK_SHIFT          0x10	// Shift键
    #define VK_CONTROL        0x11	// Ctrl键
    #define VK_MENU           0x12	// Menu键
    #define VK_PAUSE          0x13	// Pause键
    #define VK_CAPITAL        0x14	// CapsLock键
    
    #define VK_KANA           0x15
    #define VK_HANGEUL        0x15  /* old name - should be here for compatibility */
    #define VK_HANGUL         0x15
    #define VK_JUNJA          0x17
    #define VK_FINAL          0x18
    #define VK_HANJA          0x19
    #define VK_KANJI          0x19
    
    #define VK_ESCAPE         0x1B	// ESC键
    
    #define VK_CONVERT        0x1C
    #define VK_NONCONVERT     0x1D
    #define VK_ACCEPT         0x1E
    #define VK_MODECHANGE     0x1F
    
    #define VK_SPACE          0x20	// Space键(空格)
    #define VK_PRIOR          0x21	// PageUp键(PgUp)
    #define VK_NEXT           0x22	// PageDown键(PgDn)
    #define VK_END            0x23	// End键
    #define VK_HOME           0x24	// Home键
    #define VK_LEFT           0x25	// 左方向键 ←
    #define VK_UP             0x26	// 上方向键 ↑
    #define VK_RIGHT          0x27	// 右方向键 →
    #define VK_DOWN           0x28	// 下方向键 ↓
    #define VK_SELECT         0x29	// Select键
    #define VK_PRINT          0x2A	// PrintScreen键(PrtSc)
    #define VK_EXECUTE        0x2B	// Execute键
    #define VK_SNAPSHOT       0x2C	// SnapShot键
    #define VK_INSERT         0x2D	// Insert键
    #define VK_DELETE         0x2E	// Delete键
    #define VK_HELP           0x2F	// Help键
    
    /*
     * VK_0 - VK_9 are the same as ASCII '0' - '9' (0x30 - 0x39)
     * 0x40 : unassigned
     * VK_A - VK_Z are the same as ASCII 'A' - 'Z' (0x41 - 0x5A)
     */
    
    #define VK_LWIN           0x5B
    #define VK_RWIN           0x5C
    #define VK_APPS           0x5D
    
    /*
     * 0x5E : reserved
     */
    
    #define VK_SLEEP          0x5F
    
    #define VK_NUMPAD0        0x60	// 数字键盘 0
    #define VK_NUMPAD1        0x61	// 数字键盘 1
    #define VK_NUMPAD2        0x62	// 数字键盘 2
    #define VK_NUMPAD3        0x63	// 数字键盘 3
    #define VK_NUMPAD4        0x64	// 数字键盘 4
    #define VK_NUMPAD5        0x65	// 数字键盘 5
    #define VK_NUMPAD6        0x66	// 数字键盘 6
    #define VK_NUMPAD7        0x67	// 数字键盘 7
    #define VK_NUMPAD8        0x68	// 数字键盘 8
    #define VK_NUMPAD9        0x69	// 数字键盘 9
    #define VK_MULTIPLY       0x6A	// 数字键盘 *
    #define VK_ADD            0x6B	// 数字键盘 +
    #define VK_SEPARATOR      0x6C	// 数字键盘 Enter回车
    #define VK_SUBTRACT       0x6D	// 数字键盘 -
    #define VK_DECIMAL        0x6E	// 数字键盘 .
    #define VK_DIVIDE         0x6F	// 数字键盘 /
    #define VK_F1             0x70	// F1
    #define VK_F2             0x71	// F2
    #define VK_F3             0x72	// F3
    #define VK_F4             0x73	// F4
    #define VK_F5             0x74	// F5
    #define VK_F6             0x75	// F6
    #define VK_F7             0x76	// F7
    #define VK_F8             0x77	// F8
    #define VK_F9             0x78	// F9
    #define VK_F10            0x79	// F10
    #define VK_F11            0x7A	// F11
    #define VK_F12            0x7B	// F12
    #define VK_F13            0x7C	// F13
    #define VK_F14            0x7D	// F14
    #define VK_F15            0x7E	// F15
    #define VK_F16            0x7F	// F16
    #define VK_F17            0x80	// F17
    #define VK_F18            0x81	// F18
    #define VK_F19            0x82	// F19
    #define VK_F20            0x83	// F20
    #define VK_F21            0x84	// F21
    #define VK_F22            0x85	// F22
    #define VK_F23            0x86	// F23
    #define VK_F24            0x87	// F24
    
    /*
     * 0x88 - 0x8F : unassigned
     */
    
    #define VK_NUMLOCK        0x90	// NumLock键(NmLk)
    #define VK_SCROLL         0x91	// ScrollLock键(ScrLk)
    
    /*
     * NEC PC-9800 kbd definitions
     */
    #define VK_OEM_NEC_EQUAL  0x92   // '=' key on numpad
    
    /*
     * Fujitsu/OASYS kbd definitions
     */
    #define VK_OEM_FJ_JISHO   0x92   // 'Dictionary' key
    #define VK_OEM_FJ_MASSHOU 0x93   // 'Unregister word' key
    #define VK_OEM_FJ_TOUROKU 0x94   // 'Register word' key
    #define VK_OEM_FJ_LOYA    0x95   // 'Left OYAYUBI' key
    #define VK_OEM_FJ_ROYA    0x96   // 'Right OYAYUBI' key
    
    /*
     * 0x97 - 0x9F : unassigned
     */
    
    /*
     * VK_L* & VK_R* - left and right Alt, Ctrl and Shift virtual keys.
     * Used only as parameters to GetAsyncKeyState() and GetKeyState().
     * No other API or message will distinguish left and right keys in this way.
     */
    #define VK_LSHIFT         0xA0
    #define VK_RSHIFT         0xA1
    #define VK_LCONTROL       0xA2
    #define VK_RCONTROL       0xA3
    #define VK_LMENU          0xA4
    #define VK_RMENU          0xA5
    
    #if(_WIN32_WINNT >= 0x0500)
    #define VK_BROWSER_BACK        0xA6
    #define VK_BROWSER_FORWARD     0xA7
    #define VK_BROWSER_REFRESH     0xA8
    #define VK_BROWSER_STOP        0xA9
    #define VK_BROWSER_SEARCH      0xAA
    #define VK_BROWSER_FAVORITES   0xAB
    #define VK_BROWSER_HOME        0xAC
    
    #define VK_VOLUME_MUTE         0xAD
    #define VK_VOLUME_DOWN         0xAE
    #define VK_VOLUME_UP           0xAF
    #define VK_MEDIA_NEXT_TRACK    0xB0
    #define VK_MEDIA_PREV_TRACK    0xB1
    #define VK_MEDIA_STOP          0xB2
    #define VK_MEDIA_PLAY_PAUSE    0xB3
    #define VK_LAUNCH_MAIL         0xB4
    #define VK_LAUNCH_MEDIA_SELECT 0xB5
    #define VK_LAUNCH_APP1         0xB6
    #define VK_LAUNCH_APP2         0xB7
    
    #endif /* _WIN32_WINNT >= 0x0500 */
    
    /*
     * 0xB8 - 0xB9 : reserved
     */
    
    #define VK_OEM_1          0xBA   // ';:' for US
    #define VK_OEM_PLUS       0xBB   // '+' any country
    #define VK_OEM_COMMA      0xBC   // ',' any country
    #define VK_OEM_MINUS      0xBD   // '-' any country
    #define VK_OEM_PERIOD     0xBE   // '.' any country
    #define VK_OEM_2          0xBF   // '/?' for US
    #define VK_OEM_3          0xC0   // '`~' for US
    
    /*
     * 0xC1 - 0xD7 : reserved
     */
    
    /*
     * 0xD8 - 0xDA : unassigned
     */
    
    #define VK_OEM_4          0xDB  //  '[{' for US
    #define VK_OEM_5          0xDC  //  '\|' for US
    #define VK_OEM_6          0xDD  //  ']}' for US
    #define VK_OEM_7          0xDE  //  ''"' for US
    #define VK_OEM_8          0xDF
    
    /*
     * 0xE0 : reserved
     */
    
    /*
     * Various extended or enhanced keyboards
     */
    #define VK_OEM_AX         0xE1  //  'AX' key on Japanese AX kbd
    #define VK_OEM_102        0xE2  //  "<>" or "\|" on RT 102-key kbd.
    #define VK_ICO_HELP       0xE3  //  Help key on ICO
    #define VK_ICO_00         0xE4  //  00 key on ICO
    
    #if(WINVER >= 0x0400)
    #define VK_PROCESSKEY     0xE5
    #endif /* WINVER >= 0x0400 */
    
    #define VK_ICO_CLEAR      0xE6
    
    
    #if(_WIN32_WINNT >= 0x0500)
    #define VK_PACKET         0xE7
    #endif /* _WIN32_WINNT >= 0x0500 */
    
    /*
     * 0xE8 : unassigned
     */
    
    /*
     * Nokia/Ericsson definitions
     */
    #define VK_OEM_RESET      0xE9
    #define VK_OEM_JUMP       0xEA
    #define VK_OEM_PA1        0xEB
    #define VK_OEM_PA2        0xEC
    #define VK_OEM_PA3        0xED
    #define VK_OEM_WSCTRL     0xEE
    #define VK_OEM_CUSEL      0xEF
    #define VK_OEM_ATTN       0xF0
    #define VK_OEM_FINISH     0xF1
    #define VK_OEM_COPY       0xF2
    #define VK_OEM_AUTO       0xF3
    #define VK_OEM_ENLW       0xF4
    #define VK_OEM_BACKTAB    0xF5
    
    #define VK_ATTN           0xF6
    #define VK_CRSEL          0xF7
    #define VK_EXSEL          0xF8
    #define VK_EREOF          0xF9
    #define VK_PLAY           0xFA
    #define VK_ZOOM           0xFB
    #define VK_NONAME         0xFC
    #define VK_PA1            0xFD
    #define VK_OEM_CLEAR      0xFE
    
    /*
     * 0xFF : reserved
     */
    
    
    #endif /* !NOVIRTUALKEYCODES */

    另外呢,主键盘区域(非小键盘)的A-Z字母与0-9键值与相应字母和数字的ASCII码相同。

    A-Z及0-9的ASCII码值
    描述ANSII码值
    A65
    B66
    C67
    D68
    E69
    F70
    G71
    H72
    I73
    J74
    K75
    L76
    M77
    N78
    O79
    P80
    Q81
    R82
    S83
    T84
    U85
    V86
    W87
    X88
    Y89
    Z90
    048
    149
    250
    351
    452
    553
    654
    755
    856
    957

     

    展开全文
  • Word是一个功能强大的文字处理软件,在Word文档中可以方便的对文字信息进行排版,也可以向文档中插入生动、直观的图片信息,本实例将会介绍一个有趣的功能,向Word文档中插入Windows控件,并且此控件还可以响应用户...
  • VC++ 操作Word(使用微软office控件

    千次阅读 2019-03-04 23:25:33
    你可以实现诸如:Word文件打印、传送数据到Word文档、发送E-MAIL、自动产生表格、Excel数据统计、圆饼图,直方图显示、自动报表生成、播放幻灯、doc,txt,HTML,rtf文件转换、中文简繁体转换、拼音或笔画排序.........
  • 我们可以从名字上大致判断出这个按钮的作用是什么,但是有些时候这些信息还是不够,或者是软件的使用者并不是业内相关的人员,这时候我们可以使用mouseHover事件,这个事件实现的功能是当鼠标悬浮在控件的上方,...
  • 而这些可以借助于工具栏,如在Microsoft Word中的工具栏,相关的操作基本上都可以借助工具栏来完成。下面,我就将我知道的关于VC中关于工具栏的一些东西写写,与大家共享,不对的地方请大家 帮忙纠正。  下面我...
  • word添加多个目录

    千次阅读 2019-10-30 11:34:08
    word添加多个目录 在制作标书或者长文档时经常遇到同一个文档需要添加多个目录。 常规方法是通过引用—>添加目录来实现。 或者手动输入目录,经常遇到对不齐问题。 在此介绍通过域来实现添加多个目录,尤其...
  • qml自定义控件:简易的带图标按钮

    千次阅读 2019-04-22 09:46:39
    在实际需求中,Qt自带的控件显得十分“原始”,因此,想要做出更加好看的样式,常常需要用到自定义控件。 效果图 环境 ubuntu16.04 + Qt5.7.1 代码部分
  • 前面一节为大家简单介绍了如何创建Ribbon样式的应用程序框架,本节教程就来初步讲讲怎样为...VS2010为Ribbon界面开发提供了Ribbon Designer,通过它我们可以为Ribbon Bar添加各种Ribbon控件、设置控件属性和进...
  • MFC的消息封装是通过消息映射处理的 MFC的消息处理定义了各种宏例如画图消息宏ON_WM_PAINT() 这些消息必须写在BEGIN_MESSAGE_MAP(theClass, ...宏展开后的样子,这个是展开按钮控件的消息 const AFX_MSGMAP* ...
  • 插入控件按钮 2、代码编写 (1)、首先在sheet中添加一个按钮,来显示用户窗体,查看效果 Private Sub CommandButton1_Click() UserForm1.Show End Sub 鼠标单击CommandButton1出现如下窗口,这是未对窗口进行...
  •  case WM_CREATE://这里创建一个按钮,这里没有用到ID_BUTTON绑定 hwndButton1=CreateWindow(_TEXT("Button"),_TEXT("打开图像"),WS_VISIBLE|WS_CHILD|BS_DEFPUSHBUTTON,100,0,100,100,hWnd,NULL,hInst,NULL);/*...
  • C#基础教程-c#实例教程,适合初学者

    万次阅读 多人点赞 2016-08-22 11:13:24
    // TODO: 在此处添加代码以启动应用程序 // Console.WriteLine("请键入你的姓名:"); Console.ReadLine(); Console.WriteLine("欢迎!"); } } } (4) 按CTRL+F5键,运行程序,如右图,和1.2.1节...
  • VC6.0开发OCX按钮控件

    千次阅读 2013-07-09 08:39:49
    1、OCX是典型的ActiveX控件,常见的OCX控件有很多,IE浏览器、Word、Excel等都提供各种各样的OCX控件。 2、OCX控件的优点是可以在其他应用程序中嵌入使用。OCX控件做为插件、外挂式的应用非常灵活方便。 3、一般用的...
  • 一、思维导图 二、 匈牙利命名法(简短前缀命名法,btnOk确定按钮,btnExit退出按钮) VB2015 常用的前缀
  • 测试开发笔记

    万次阅读 多人点赞 2019-11-14 17:11:58
    读书选择 166 3.2.Counter 168 3.3:word中的判定表举例 169 3.4.合并判定表 170 3.4.密码修改 171 3.5.进销存 173 3.6.总结 175 因果图 176 4.1.字母判定 177 4.2.自动售货机 179 课前复习: 180 状态迁移 181 5.1....
  • 编辑控件+按钮的应用 1.创建一个对话框,在对话框上能够输入并显示字符串,比如“Nothing Is Impossible”。 2.在对话框中添加一个按钮,点击按钮,显示按词倒序以后的字符串,比如“Impossible Is Nothing”。 点击...
  • Word2019添加复选框

    千次阅读 2020-05-04 08:37:37
    2.2 完成后,在Word工具栏可看到开发工具栏,单击开发工具栏,即可看到添加复选框按钮,如下所示: 2.3 点击按钮即可添加,另外选中按钮后,单击属性即可修改复选框样式 2.4 之后弹出内容控件属性框,可更改复选框...
  • Java向word表格中添加新行并赋值

    千次阅读 2019-02-22 09:56:39
    但这是不够的,对于一些OA项目,则需要在线打开word文档并通过后台的设置将数据添加word表格中,甚至对表格进行添加新行的操作。这需要开发者具备将activex控件集成到Java环境的能力。对于大部分Java开发工程师来...
  • 参照某网站上的步骤(http://www.kuqin.com/office/20070909/968.html)首先,在Visual Studio中创建一个C#语言的Windows应用程序,然后在左侧的工具箱中点击鼠标右键,选择“添加/移除选项”,就能够打开自定义工具...
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...
  • HTML标签常用标签

    千次阅读 多人点赞 2017-02-23 11:33:58
    元素前后添加折行。 提示: <address> 标签不应该用于描述通讯地址,除非它是联系信息的一部分。 提示: <address> 元素通常连同其他信息被包含在 <footer> 元素中。 7 、 标签 ...
  • 扩充的按钮控件(24KB) 15,csplitba.zip 在窗体里随意建立分隔条(11KB) 16,gbarocx.zip 进度条(171KB) 17,ccrpprg.zip 一个进度条的控件,可以有多种形态供你选择(142KB) 18,chklsb25.zip 它提供了类似 word 和 excel...
  • 文章目录一、基本知识1.1 常用控件介绍 一、基本知识 对话框就是一个窗口,它不仅可以接收消息,而且可以被移动和关闭,甚至可以在客户区进行绘图。对话框相当于一个容器,在它上面能够放置各种各样的标准控件和扩展...
  • 在VS2010/MFC中如何对对话框添加控件

    千次阅读 2016-01-14 09:38:18
    创建对话框资源需要创建对话框模板、修改对话框属性、为对话框添加各种控件等步骤。而如何为对话框添加控件直接影响到界面的美观和开发人员的工作效率。本人将为大家介绍如何为对话框添加控件的详细步骤。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,031
精华内容 7,212
关键字:

word添加按钮控件