有熟悉SDK合C++的吗?看看我试验的一段有关窗口类注册、创建窗口实类...的程序为什么没有报错? ( 积分: 200 )

H

hotboy

Unregistered / Unconfirmed
GUEST, unregistred user!
有熟悉SDK合C++的吗?看看我试验的一段有关窗口类注册、创建窗口实类...的程序为什么没有报错?注意代码中标志为“//为什么没有错误???”竟然没问题。
按照我的理解,注册窗口类(RegisterWindow)的hInstance,以及创建的窗口实类(CreateWindow)的hInstance应该从主函数 WinMain传递过来才对,也就是窗口类以及窗口实类要与进程的hInstance关联起来才对。可是我随便瞎写个hInstance【如((HINSTANCE)65000;、HINSTANCE)2;】,竟然编译通过,运行也没问题,请大师指导,究竟hInstance什么东东?
//代码如下。编译环境VC++ 6.0
//需要包含的头文件---------------------------------
#include <afx.h>
#include<windows.h>
//定义全局变量和函数-------------------------------
HINSTANCE hInst;
HINSTANCE hInstance;
MSG msg;
char lpszClassName[]="window_class";
char*ShowText;
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
//窗口类----------------------------------------------
class CFrameWnd
{
public:
HWND hWnd;
public:
int RegisterWindow();
void Create(LPCTSTR lpClassName,
LPCTSTR lpWindowName
);
void ShowWindow(int nCmdShow);
void UpdateWindow();
};
//窗口类的成员函数---------------------------------
int CFrameWnd::RegisterWindow()
{

WNDCLASS wc;
wc.style=0;
wc.lpfnWndProc=WndProc;
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.hInstance=(HINSTANCE)65000;//为什么没有错????????????????????????
wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wc.hCursor=LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wc.lpszMenuName=NULL;
wc.lpszClassName=lpszClassName;

return RegisterClass(&amp;wc);
}
void CFrameWnd::Create(LPCTSTR lpClassName,
LPCTSTR lpWindowName)
{

RegisterWindow( );
hInstance=(HINSTANCE)2;//为什么没有错误?????????????????????????????
hInst = hInstance;


hWnd = CreateWindow(lpszClassName,
lpWindowName,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
0,
CW_USEDEFAULT,
0,
NULL,
NULL,
hInstance,
NULL);
}
void CFrameWnd::ShowWindow(int nCmdShow)
{
::ShowWindow(hWnd, nCmdShow);
}
void CFrameWnd::UpdateWindow()
{
::UpdateWindow(hWnd);
}
//应用程序类------------------------------
class CWinApp
{
public:
CFrameWnd*m_pMainWnd;
public:
BOOL InitInstance (int nCmdShow);
int Run();
};
//应用程序类的成员函数-----------------------------
BOOL CWinApp::InitInstance(int nCmdShow)
{
m_pMainWnd=new CFrameWnd;
m_pMainWnd->Create(NULL,"封装的Windows程序");
m_pMainWnd->ShowWindow(nCmdShow);
m_pMainWnd->UpdateWindow();
return TRUE;
}
int CWinApp::Run()
{
while (GetMessage(&amp;msg, NULL, 0, 0))
{
TranslateMessage(&amp;msg);
DispatchMessage(&amp;msg);
}
return msg.wParam;
}
//程序员定义的WinApp的对象theApp---------------------
CWinApp theApp;
//主函数---------------------------------------------
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
int ResultCode=-1;
theApp.InitInstance(nCmdShow);

return ResultCode=theApp.Run();
}
//窗口函数------------------------------------------
LRESULT CALLBACK WndProc(HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;
switch (message)
{
case WM_LBUTTONDOWN:
ShowText="Hello!";
InvalidateRect(hWnd,NULL,1);
break;
case WM_PAINT:
hdc = begin
Paint(hWnd, &amp;ps);
TextOut(hdc,50,50,ShowText,6);
EndPaint(hWnd, &amp;ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc( hWnd, message,
wParam, lParam);
}
return 0;
}
//-------------------------------------------------
 
N

NeutronDelphi

Unregistered / Unconfirmed
GUEST, unregistred user!
hInstance=(HINSTANCE)2
为什么有错误啊,就是一个简单变量的赋值加上强制类型转换啊,
等同于Delphi里面的
hInstance:=HINSTNACE(2)
还有C++是1区分大小写,Delphi基本上不区分大小写
 
顶部