VC++ 高手进 :findwindow函数怎么获取不到这个窗口?
个人电脑win 7版,64位操作系统,原来office2007和2010都没有问题。
只是国知局衙门要求更新后,出现了一样的问题:解决办法:卸载【office】和【CPC客户端】,重新安装【office】和【CPC客户端】,然后,如下操作便可。
1、到国知局衙门网站网页链接下载【CPC客户端离线升级包(2018-04-23).zip 】。
下载后文件名为【23113039p5oe.zip】2、解压【23113039p5oe.zip】后,生成文件夹【23113039p5oe】,内含文件夹【CPC客户端离线升级包(2018-04-23)】。
双击进去,有文件夹【updatPackage】,双击安装【updateDataBase.exe】3、返回文件夹【CPC客户端离线升级包(2018-04-23)】,首先,双击安装【fmlsetup-ax-greatWallCS.exe】。
然后再双击安装【OffLineUpdate.exe】(这是我暂时走通的路,请不要改变任何顺序,也别再提问。
因为我是外行,比较笨。
我只是不愿意自己被人家,白白夺走了几天时间和精力的事,再让更多的人经历这个坑子。
祝大家好运!也希望更多的人无私的分享怎么破除这种祸害人方式的,让更多的人,把更多的精力投入到有意义的事上去)
MFC 如如何关闭已经打开的word文件
// 输入控件.cpp : 定义应用程序的入口点。
//#include "stdafx.h"#include "输入控件.h"#include#include"strsafe.h"#define MAX_LOADSTRING 100//单个个体的数据typedef struct{TCHAR Text[20];}node; typedef struct{node name[100];int n;}line;// 全局变量:HINSTANCE hInst; // 当前实例TCHAR szTitle[MAX_LOADSTRING]; // 标题栏文本TCHAR szWindowClass[MAX_LOADSTRING]; // 主窗口类名line all; //定义一个可以存储的结构体// 此代码模块中包含的函数的前向声明:ATOM MyRegisterClass(HINSTANCE hInstance);BOOL InitInstance(HINSTANCE, int);LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);INT_PTR CALLBACK Put(HWND, UINT, WPARAM, LPARAM);int APIENTRY _tWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow){UNREFERENCED_PARAMETER(hPrevInstance);UNREFERENCED_PARAMETER(lpCmdLine);// TODO: 在此放置代码。
MSG msg;HACCEL hAccelTable;// 初始化全局字符串LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);LoadString(hInstance, IDC_MY, szWindowClass, MAX_LOADSTRING);MyRegisterClass(hInstance);// 执行应用程序初始化:if (!InitInstance (hInstance, nCmdShow)){return FALSE;}hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_MY));// 主消息循环:while (GetMessage(msg, NULL, 0, 0)){if (!TranslateAccelerator(msg.hwnd, hAccelTable, msg)){TranslateMessage(msg);DispatchMessage(msg);}}return (int) msg.wParam;}//// 函数: MyRegisterClass()//// 目的: 注册窗口类。
//// 注释://// 仅当希望// 此代码与添加到 Windows 95 中的“RegisterClassEx”// 函数之前的 Win32 系统兼容时,才需要此函数及其用法。
调用此函数十分重要,// 这样应用程序就可以获得关联的// “格式正确的”小图标。
//ATOM MyRegisterClass(HINSTANCE hInstance){WNDCLASSEX wcex;wcex.cbSize = sizeof(WNDCLASSEX);wcex.style = CS_HREDRAW | CS_VREDRAW;wcex.lpfnWndProc = WndProc;wcex.cbClsExtra = 0;wcex.cbWndExtra = 0;wcex.hInstance = hInstance;wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MY));wcex.hCursor = LoadCursor(NULL, IDC_ARROW);wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);wcex.lpszMenuName = MAKEINTRESOURCE(IDC_MY);wcex.lpszClassName = szWindowClass;wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));return RegisterClassEx(wcex);}//// 函数: InitInstance(HINSTANCE, int)//// 目的: 保存实例句柄并创建主窗口//// 注释://// 在此函数中,我们在全局变量中保存实例句柄并// 创建和显示主程序窗口。
//BOOL InitInstance(HINSTANCE hInstance, int nCmdShow){HWND hWnd;hInst = hInstance; // 将实例句柄存储在全局变量中hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);if (!hWnd){return FALSE;}ShowWindow(hWnd, nCmdShow);UpdateWindow(hWnd);return TRUE;}//// 函数: WndProc(HWND, UINT, WPARAM, LPARAM)//// 目的: 处理主窗口的消息。
//// WM_COMMAND - 处理应用程序菜单// WM_PAINT - 绘制主窗口// WM_DESTROY - 发送退出消息并返回////LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){int wmId, wmEvent;TCHAR szBuffer[128]; //缓存PAINTSTRUCT ps;HDC hdc;size_t ss; //记录长度//all.n=0; //全局变量switch (message){case WM_CREATE:all.n=0; //全局变量数据改变必须在事件驱动中break;case WM_COMMAND:wmId = LOWORD(wParam);wmEvent = HIWORD(wParam);// 分析菜单选择:switch (wmId){case IDM_PUT:if(DialogBox(hInst, MAKEINTRESOURCE(IDD_PUT), hWnd, Put))InvalidateRect(hWnd, NULL, TRUE);break;case IDM_ABOUT:DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);break;case IDM_EXIT:DestroyWindow(hWnd);break;default:return DefWindowProc(hWnd, message, wParam, lParam);}break;case WM_PAINT:hdc = BeginPaint(hWnd, ps);for(int k=0;k<=all.n;k++){//StringCchPrintf(szBuffer,128,TEXT("%d:%s"),all.n,all.name[all.n].Text); //记录要输出的字符串StringCchPrintf(szBuffer,128,all.name[k].Text); //记录要输出的字符串StringCchLength(szBuffer,128,ss); //记录长度TextOut(hdc,0,k*15,szBuffer,ss); //输出位置(0,0)}EndPaint(hWnd, ps);break;case WM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProc(hWnd, message, wParam, lParam);}return 0;}// “关于”框的消息处理程序。
INT_PTR ...
vc区域截图????
给你一个函数,可以把lpRect区域存到HBITMAP里。
有了HBITMAP就好处理了。
至于那个区域的获得,建议按下的时候用SetCapture函数截获鼠标事件,抬起的时候ReleaseCapture,这样就能得到那个区域了。
HBITMAP CDrawWnd::CopyScreenToBitmap(LPRECT lpRect)//lpRect 代表选定区域{HDC hScrDC, hMemDC; // 屏幕和内存设备描述表HBITMAP hBitmap, hOldBitmap; // 位图句柄int nX, nY, nX2, nY2; // 选定区域坐标int nWidth, nHeight;// 确保选定区域不为空矩形if (IsRectEmpty(lpRect))return NULL;//为屏幕创建设备描述表hScrDC = CreateDC("DISPLAY", NULL, NULL, NULL);//为屏幕设备描述表创建兼容的内存设备描述表hMemDC = CreateCompatibleDC(hScrDC);// 获得选定区域坐标nX = lpRect->left;nY = lpRect->top;nX2 = lpRect->right;nY2 = lpRect->bottom;nWidth = nX2 - nX;nHeight = nY2 - nY;// 创建一个与屏幕设备描述表兼容的位图hBitmap = CreateCompatibleBitmap(hScrDC, nWidth, nHeight);// 把新位图选到内存设备描述表中hOldBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap);// 把屏幕设备描述表拷贝到内存设备描述表中BitBlt(hMemDC, 0, 0, nWidth, nHeight,hScrDC, nX, nY, SRCCOPY);hBitmap = (HBITMAP)SelectObject(hMemDC, hOldBitmap);//得到屏幕位图的句柄//清除 DeleteDC(hScrDC);DeleteDC(hMemDC);// 返回位图句柄return hBitmap;}
有多少个窗口,却永远都是只有一个窗口再
MFC子窗口和父窗口(SetParent,SetOwner) 一、概念和区别 在windows系统中,每个窗口对象都对应有一个数据结构,形成一个list链表。
系统的窗口管理器通过这个list来获取窗口信息和管理每个窗口。
这个数据结构中有四个数据用来构建list,即child、sibling、parent、owner四个域。
所以我们可以看到,窗口之间的关系有两种:owner-owned 关系和 parent-child关系。
前者称之为拥有/被拥有关系,后者称之为父/子关系。
在这篇文字中,我把owner窗口称之所有者窗口。
换句话说,一个窗口在有一个父窗口(parent)的同时,还可能被不同的窗口拥有(owner),也可以有自己的子窗口(child)。
在MFC 的CWnd类中,所有者窗口保存在m_hWndOwner成员变量中,父窗口则保存在m_hParent中,但是这两个值并不一定和窗口对象数据结构中的值相对应。
窗口之间的关系,决定了窗口的外在表现。
比如显示、销毁等。
如果一个窗口数据的owner域非NULL,则它和该窗口建立了owner-owned 关系,拥有关系决定了:(1)被拥有的窗口永远显示在拥有它的那个窗口的前面;(2)当所有者窗口最小化的时候,它所拥有的窗口都会被隐藏;(3)当所有者窗口被销毁的时候,它所拥有的窗口都会被销毁。
需要注意的是,隐藏所有者窗口并不会影响它所拥有的窗口的可见状态。
比如:如果窗口 A 拥有窗口B,窗口B拥有窗口C,则当窗口A最小化的时候,窗口B被隐藏,但是窗口 C还是可见。
如果一个窗口的parent域非NULL,则它和该窗口之间就建立了parent-child关系。
父子决定了:(1)窗口在屏幕上面的显示位置。
父窗口提供了用来定位子窗口的坐标系统,一个子窗口只能显示在它的父窗口的客户区中,之外的部分将被裁减。
这个裁减法则决定了如果父窗口不可见,则子窗口肯定不可见。
如果父窗口移动到了屏幕之外,子窗口也一样。
(2)当父窗口被隐藏时,它的所有子窗口也被隐藏。
(3)父窗口被销毁的时候,它所拥有的子窗口都会被销毁。
注意!最小化父窗口不会影响子窗口的可见状态,子窗口会随着父窗口被最小化,但是它的WS_VISIBLE属性不会变。
Windows系统为什么要使用两种关系呢?这是为了更加灵活的管理窗口。
举个例子:组合框(combobox)的下拉列表框(list box)可以超出组合框的父窗口的客户区,这样有利于显示,因此系统创建该list box的时候,是作为控制台窗口(desktop window)的子窗口,它的父窗口hWndParent是NULL,这样,list box的显示区域是限制在整个屏幕内,但是该list box的所有者却是组合框的第一个非子窗口祖先(比如对话框),当它的所有者窗口销毁后,该 list box自动销毁。
另外,窗口之间消息的传递也和窗口关系有关,通常,一个窗口会把自己的通知消息发送给它的父窗口,但不全是这样,比如,CToolBar发送通知消息给它的所有者窗口而不是父窗口。
这样以来,就可以允许工具条作为一个窗口(比如一个 OLE 容器程序窗口)的子窗口的同时,能够给另一个窗口(比如in-place框架窗口)发送消息。
至于某类窗口到底是把消息发送给谁,是父窗口还是所有者窗口,microsoft并没有明示。
还有,在现场(in-place)编辑的情况下,当一个 server 窗口激活或者失效的时候,框架窗口所拥有的子窗口自动隐藏或者显示,这也是通过直接调用SetOwner函数实现的。
二、窗口类型的说明和限制 (1)控制台窗口(desktop window)。
这是系统最早创建的窗口。
可以认为它是所有 WS_OVERLAPPED 类型窗口的所有者和父窗口。
Kyle Marsh在他的文章“Win32 Window Hierarchy and Styles”中指出,当系统初始化的时候,它首先创建控制台窗口,大小覆盖整个屏幕。
所有其它窗口都在这个控制台窗口上面显示。
窗口管理器所用的窗口list中第一个就是这个控制台。
它的下一层窗口叫做顶级窗口(top-level),顶级窗口是指所有非child、没有父窗口,或者父窗口是desktop的窗口,它们没有WS_CHILD属性。
(2)WS_OVERLAPPED类型的窗口可以显示在屏幕的任何地方。
它们的所有者窗口是控制台。
Overlapped 类型的窗口属于顶级窗口,一般作为应用程序的主窗口。
不论是否给出了WS_CAPTION、WS_BORDER属性,这类窗口创建后都有标题栏和边框。
Overlapped窗口可以拥有其它顶级窗口或者被其它顶级窗口所拥有。
所有overlapped窗口都有WS_CLIPSIBLINGS属性。
系统可以自动设置 overlapped窗口的大小和初始位置。
当系统 shuts down的时候,它将销毁所有overlapped类型的窗口。
(3)WS_POPUP类型的窗口可以显示在屏幕任何地方,它们一般没有父窗口,但是如果明确调用SetParent,这类窗口也可以有父窗口。
WS_POPUP类型的窗口的所有者是在CreateWindow函数中通过设置hWndParent参数给定的,如果hWndParent不是子窗口,则该窗口就成为这个新的弹出式窗口的owner,否则,系统从hWndParent的父窗口向上找,直到找到第一个非子窗口,把它作为该弹出窗口的owner。
当owner窗口销毁的时候,系统自动销毁这个弹出窗口。
Pop-up类型的窗口也属于顶级窗口,它和 overlapped 窗口的主要区别是弹出式窗口...
转载请注明出处51数据库 » 获取word窗口句柄失败