❶ 知道一個窗體的句柄,如何獲取這個窗體
var frm = (Control)Form.FromHandle(h);
h為句柄,我這里強轉成control了,你可以自己看情況改動
我原來寫過一個例子,調用cmd.exe窗口,並嵌入到自己的窗體內,你可以參考一下
using System;
using System.Collections;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.Data;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace WindowsApplication1
{
public partial class Form2 : Form
{
[DllImport("user32", EntryPoint = "SetParent", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)]
public static extern int SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
[DllImport("user32", EntryPoint = "FindWindowA", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll", EntryPoint = "SendMessageA", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)]
private static extern int SendMessage(int hwnd, int wMsg, int wParam, int lParam);
[DllImport("shell32.dll", EntryPoint = "ShellExecuteA", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)]
private static extern int ShellExecute(int hwnd, string lpOperation, string lpFile, string lpParameters, string lpDirectory, int nShowCmd);
private const int WM_SYSCOMMAND = 0x112;
private const int SC_MAXIMIZE = 0xF030;
private const int SC_MINIMIZE = 0xF020;
private const int SC_RESTORE = 0xF120;
public const int SW_HIDE = 0;
public const int SW_SHOW = 5;
[DllImport("user32.dll ", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)]
private static extern int ShowWindow(int hwnd, int nCmdShow);
public Form2()
{
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e)
{
//Process p = null;
// p = System.Diagnostics.Process.Start("c:\\windows\\system32\\cmd.exe");
ShellExecute(this.panel1.Handle.ToInt32(), "open", @"c:\\windows\\system32\\cmd.exe", null, ".", SW_HIDE); // 讓CtrlDemo.exe運行在PANEL里
IntPtr h = FindWindow(null, "c:\\windows\\system32\\cmd.exe");
//關鍵在這里
var frm = (Control)Form.FromHandle(h);
//使你的Form可以嵌入別的容器
//frm.Visible = true;
SetParent(h, this.panel1.Handle); //嵌套到panel1內
SendMessage(h.ToInt32(), WM_SYSCOMMAND, SC_MAXIMIZE, 0);
ShowWindow(h.ToInt32(), SW_SHOW);
}
}
}
❷ fromhandle()是幹嘛函數是做什麼用的
pMap是什麼玩意兒? FromHandle(HWMD hWnd)是靜態方法啊,用類名直接調用,返回的就是CWnd*,不需要強制轉換。誰寫的代碼?在什麼場合里寫的代碼?
❸ CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));是什麼意思,求翻譯
樓主你好!
整個的這一句代碼,是這樣的,下面我一個地方一個地方給你解釋:
首先,定義了一個CBrush類的指針pBrush,然後,將這個CBrush類的成員函數FromHandle()的返回值賦給它,因為CBrush是封裝類,所以,用::符,指明在這里調用的是CBrush類的FromHandle(),而不是CWnd、CDialog等類的,因為FromHandle()在很多封裝類中都有,作為方法成員(即成員函數)。FromHandle()見名思義,即「從句柄獲得什麼什麼」。
GetStockObject()用在這里,指明你要創建一個什麼樣的畫刷,是空畫刷?還是實心畫刷?還是其他的?NULL_BRUSH是一個宏,表示空畫刷,在這里等同於HOLLOW_BRUSH,兩個可以通用。HOLLOW,中文意思即為「空」。所以,這句代碼,是創建了一個畫刷類(CBrush)的指針變數,並在定義之時,為其創建了一個空畫刷。
通常,可以在為靜態文本控制項、編輯框控制項、按鈕控制項等控制項設置透明時,使用這句代碼。
希望能為你帶來幫助,謝謝!
❹ 怎麼理解CWnd::FromHandle(HWMD hWnd)里的一句
pMap是什麼玩意兒?
FromHandle(HWMD hWnd)是靜態方法啊,用類名直接調用,返回的就是CWnd*,不需要強制轉換。
誰寫的代碼?在什麼場合里寫的代碼?
❺ 同一個線程 FromHandlePermanent不能得到窗口對象
說半天也沒說明白。這個函數只會獲取CWnd指針,不會創建CWnd對象。換句話說,你進行操作的窗口句柄必須關聯了CWnd或其派生類的對象這個函數才能起作用。
❻ FromHandlePermanent到底返回什麼東西
FromHandle 當給定一個窗口的句柄時,返回CWnd對象的指針。如果沒有CWnd對象與這個句柄相連接,則創建一個臨時的CWnd對象並與之相連接 FromHandlePermanent 當給定一個...
❼ CBitmap::FromHandle(hBitmap) 將hbitmap變成CBitmap類 怎麼成全局變數,使hbitmap也能在別的函數中調用
可以參照 theApp的作法
❽ 我想給CIMAGE 添加 繪畫的對象 CDC::FromHandle 怎麼用啊
首先說FromHandle用法,這樣不對,正確的是這樣的:
HDC hDC;....
CDC mDC;
mDC.FromHandle(hDC);
其次說思路,你的需求,正確思路是這樣的:在畫圖之前,CreateCompatibleDC創建內存DC,SelectObject將一個點陣圖句柄載入到內存DC,畫圖直接使用內存DC,然後BitBlt到設備dc(在OnDraw或者Onpaint中),這樣在畫完成之後,這個點陣圖句柄就可以保存你畫的圖了。
❾ FromHandle函數的作用和用法
使用一個句柄初始化對象
因為MFC的類很多都是封裝SDK中相對應句柄的
先SDK去看看
看完SDK再去理解MFC不然要弄暈的
❿ 電腦老是彈出個英文窗口,怎麼解決
360修復一下試試