影拓四代
{影拓四代:数字艺术创作的革命性飞跃在数字化艺术日益繁荣的当下,创作工具的选择直接影...
萌力号将会带领大家了解htcdhd,希望你可以从本文中找到答案。
实例句柄是HINSTANCE。HWND那是窗口句柄!
HINSTANCE是一个程序的标识。因此,通过判断HINSTANCE可以控制系统可以运行的程序的实例的个数。
另外通过HINSTANCE还可以得到HWND,然后结合它们可以通过API更换系统图标啊什么的,很方便。
使用API得到HINSTANCE的方法:
char buf[MAX_PATH];
::GetModuleFileNameA(0, (LPCH)&buf, MAX_PATH); // 这里0就会默认得到调用进程的实例句柄
HINSTANCE instance = ::GetModuleHandleA(buf);
这是在纯API环境下。
lz 你好
因为BitBlt函数是在位图上操作的,因此你应该先创建一个内存兼容位图hBitmap,然后将其选入内存DC中,再才能在内存DC中进行画图操作。
如果不创建,内存DC中就没有位图可供BitBlt操作,因此无法贴出你要显示的字符串
以下是修改后的完整代码:
#include<windows.h>
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR szCmdLine,
int nCmdShow)
{
TCHAR szAppName[] =TEXT("内存DC测试");
HWND hwnd;
MSG msg;
WNDCLASS wndclass;
wndclass.style = CS_HREDRAW|CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.hCursor = LoadCursor(NULL,IDC_ARROW);
wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION);
wndclass.hInstance = hInstance;
wndclass.lpszClassName = szAppName;
wndclass.lpszMenuName = NULL;
// 注册窗口类
if(!RegisterClass(&wndclass))
{
MessageBox(NULL,TEXT("This program requires Windows NT!"),TEXT("Error"),MB_ICONERROR);
return 0;
}
hwnd = CreateWindow(szAppName,szAppName,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,
CW_USEDEFAULT,CW_USEDEFAULT,
NULL,NULL,hInstance,NULL);
ShowWindow(hwnd, nCmdShow);
//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 SIZE sClient;//保存窗口客户区大小
HDC hdc, memDC;
HBITMAP hBitmap;
PAINTSTRUCT ps;
switch(message)
{
//在WM_SIZA消息中获取窗口客户区大小
case WM_SIZE:
sClient.cx = LOWORD(lParam);//客户区宽度
sClient.cy = HIWORD(lParam);//客户区高度
return 0;
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
memDC = CreateCompatibleDC(hdc); //创建内存DC
//创建内存位图(必须在内存位图中进行画图操作)
hBitmap = CreateCompatibleBitmap(hdc, sClient.cx, sClient.cy);
//将内存位图hBitmap选如内存DC中
SelectObject(memDC, hBitmap);
TextOut(memDC, 0, 0, TEXT("Hello World!"), lstrlen(TEXT("Hello World!")));
//BitBlt必须在有位图的DC上操作,现在可以显示了
BitBlt(hdc, 0, 0, sClient.cx, sClient.cy, memDC, 0, 0, SRCCOPY);
DeleteObject(hBitmap);//回收hBitmap所占的内存
DeleteDC(memDC);
EndPaint(hwnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return DefWindowProc(hwnd, message, wParam, lParam);
}
现在能显示了
希望能帮助你哈
be useful for sb.对…有好处; 用于形容词、名词和动词短语后,引出其后动词不定式的主语
be useful to sb.对某人有用;针对某人有用(句子的主语可以是人或物)
例句:
It is useful for somebody to do something对某人干某事是有用的
It is very useful for a person to know how to swim.对一个人来说会游泳是很有用的。
It may be useful for us to consider the data separately.把数据分别进行考虑对我们来说是有用的。
Something be useful for somebody who…对于某种类型的人来说某物是有用的
The slow cooker is very useful for people who go out all day.慢炖锅对于整天都不
He might be useful to us.他也许对我们有用。
This information may be useful to the enemy.这条消息可能对敌人有用。