如何获得窗口句柄啊?

wangfei913 2004-05-08 03:01:22
我用下面的语句创建hdc。
HWND hWnd;
HDC hdc;
hdc=GetDC(hWnd);
运行是提示错误hdc=NULL;
是不是窗口句柄没获得啊?
那hwnd的值怎么获得啊?用什么函数或者是怎么?
谢了

...全文
128 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
mingbao 2004-07-15
  • 打赏
  • 举报
回复
估计你应该是想得到其它窗口的句柄, 如楼主所言 Hwnd=FindWindow(窗口类型,标题)
而且就算想找代码所在的窗口,这个方法也适用的.

当然也可以用 窗口自身的成员变量 m_hWnd ,它保存所在窗口的句柄.

但 GetDlgItem(ID--) 是不行的, 它返回窗口的指针
赖勇浩 2004-07-15
  • 打赏
  • 举报
回复
哈哈,你要的是一个其它窗口的hWnd吧,用FindWindow(),它的返回值就是了。
victorydsk 2004-07-15
  • 打赏
  • 举报
回复
pWnd->GetSafeHwnd()
即可。
yeedward 2004-07-14
  • 打赏
  • 举报
回复
HWND hWnd;
HDC hdc;
hdc=hWnd.GetSafeHdc();
lixiaosan 2004-07-13
  • 打赏
  • 举报
回复
CDC *pDC = GetDC();
pingguigui 2004-07-13
  • 打赏
  • 举报
回复
The GetDlgItem function retrieves the handle of a control in the specified dialog box.

GetDlgItem好像是获得窗口里控件的句柄,不是窗口的句柄啊
窗口的句柄如何获得啊
cancan71012 2004-07-13
  • 打赏
  • 举报
回复
方法1 :获取m_hWnd全局变量;
方法2:GetDlgItem(IDC——);
magicchen 2004-07-13
  • 打赏
  • 举报
回复
靠,CWnd及其派生类都有一个叫做m_hWnd的成员变量来存放自身的窗口句柄,你试试,应该不会有问题
名牌大灰狼 2004-07-13
  • 打赏
  • 举报
回复
GetSafeHwnd
windyloft 2004-07-13
  • 打赏
  • 举报
回复
GetSafeHwnd
ygzdev 2004-05-08
  • 打赏
  • 举报
回复
嘿嘿,HWND hWnd=GetDlgItem(IDC_EDIT);懂了吧,给分吧
Developerljm 2004-05-08
  • 打赏
  • 举报
回复
m_hWnd
GetSafeHwnd
VC获得进程ID获得主线程ID获得窗口句柄获得窗口获得进程名 1.窗口类名 窗口句柄 窗口标题 窗口句柄 HWND FindWindow( LPCTSTR lpClassName, //窗口类名 可用 VC或者VS自带的Spy++查看 LPCTSTR lpWindowName //窗口标题 ); 举例: 以 记事本为例, 记事本 窗口类名 为:NotePad, 窗口标题 视按具体情况而定,假设为"新建 文本文档.txt - 记事本" 窗口类名 窗口句柄 TCHAR lpClassName[]=TEXT("NotePad"); HWND hWnd=::FindWindow(lpClassName,NULL); if(hWnd && IsWindow(hWnd)) ::ShowWindow(hWnd,SW_HIDE); 窗口标题 窗口句柄 TCHAR lpWindowName[]=TEXT("新建 文本文档.txt - 记事本"); HWND hWnd=::FindWindow(NULL,lpWindowName); if(hWnd && IsWindow(hWnd)) ::ShowWindow(hWnd,SW_HIDE); 2.窗口句柄 进程ID 窗口句柄 主线程ID 要使用到的函数: DWORD GetWindowThreadProcessId( HWND hWnd, //目标窗口句柄 LPDWORD lpdwProcessId //返回目标窗口对应进程ID ); 例子: DWORD dwProcId=0;//存放返回的进程ID DWORD dwThreadId=0;//存放返回的主线程ID HWND hWnd=XXXX;//这里省略,可能用任务方式得到一个窗口句柄.比如用1中的方法. dwThreadId=GetWindowThreadProcessId(hWnd,&dwProcId);//同时得到进程ID和主线程ID. 3.窗口HAND CWnd 用CWnd::FromHandle(HWND hWnd)函数.很多类都有这个函数. 4.进程名 进程ID (注:进程名,即在"任务管理器"中看到的名字) 用CCheckObject类(详细实现源文件); 例子: 以记事本为例,进程名为 NOTEPAD.EXE (不一定是大写哦,得到任务管理器是显示而定); CCheckObject ch; TCHAR Name[]=TEXT("NOTEPAD.EXE"); DWORD dwProcId=ch.GetProcessId(Name); 5. 进程名 主线程ID 例子: CCheckObject ch; TCHAR Name[]=TEXT("NOTEPAD.EXE"); DWORD dwThreadId=ch.GetThreadId(Name); 6. 进程名 主窗口句柄 CCheckObject ch; TCHAR Name[]=TEXT("NOTEPAD.EXE"); HWND hWnd=ch.GetTargetWindowHanle(Name); 7. 其它说明 从CCheckObject类和上面的源码中,不难写出从 进程ID 主线程ID 进程ID 主窗口句柄 主线程ID--->主窗口句柄 等等其它类似转换. 对于主窗口,特点如下: A. 不能用进程ID,要用线程ID,因为一个进程可能有多个线程,每个线程都可能会有主窗口. B. 主窗口不会有WS_CHILD属性 C. 主窗口没有父窗口 D. 主窗口一般都有子窗口(这个不是一定的,但是具有普遍性)

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧