学习VC系列--如何创建一个窗体《100分》

yjdn 2006-11-26 04:52:01
1.请给出一个完整的,最简单的创建窗体的代码。
2.及回答我对代码中不明白的部分提出的问题

分数按劳分配。
...全文
135 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yjdn 2006-11-26
  • 打赏
  • 举报
回复
thank you
kugou123 2006-11-26
  • 打赏
  • 举报
回复
1.char* 是一个指针?相当于字符串类型么?和Tchar有什么差别?
char * 是字符串指针类型。如果当前编译方式为ANSI(默认)方式,TCHAR等价于CHAR,如果为Unicode方式,TCHAR等价于WCHAR。

2.TEXT() 是指什么意思?把字符串变成TCHAR类型的数组?
TEXT()是一个宏,用来在编译时候,决定字符是采用UNICODE方式还是ASCII方式。这个和工程设置有关,看是定义了_UNICODE还是_MBCS

3.&wndclass 指的是什么意思?
RegisterClass (&wndclass) 这个函数的参数是指针类型,所以要求传入的是地址,&是取地址操作符。就是取&wndclass在内存中的地址了。
问题 4. 和 5
这是预编译头文件,一般是系统加入需要引用的头文件。

关于stdafx.h的作用:


Windows和MFC的include文件都非常大,即使有一个快速的处理程序,编译程序也要花费相当长的时间来完成工作。由于每个.CPP文件都包含相同的include文件,为每个.CPP文件都重复处理这些文件就显得很傻了。
为避免这种浪费,AppWizard和Visual C++编译程序一起进行工作,如下所示:
AppWizard建立了文件stdafx.h,该文件包含了所有当前工程文件需要的MFC include文件。且这一文件可以随被选择的选项而变化。
AppWizard然后就建立stdafx.cpp。这个文件通常都是一样的。
然后AppWizard就建立起工程文件,这样第一个被编译的文件就是stdafx.cpp。
当Visual C++编译stdafx.cpp文件时,它将结果保存在一个名为stdafx.pch的文件里。 (扩展名pch表示预编译头文件。)
当Visual C++编译随后的每个.cpp文件时,它阅读并使用它刚生成的.pch文件。 Visual C++不再分析Windows include文件,除非你又编缉了stdafx.cpp或stdafx.h。

6.还有basetsd.h

The Basetsd.h header file defines the new data types needed for writing applications that run on both 32- and 64-bit Windows.
yjdn 2006-11-26
  • 打赏
  • 举报
回复
有没有关于VC项目中各个文件的相应作用的资料?
请给一份。

解决上面问题后马上结帖
yjdn 2006-11-26
  • 打赏
  • 举报
回复
4.在Source Files ->StdAfx.cpp,这个文件中只有一行代码,这个文件作用是什么?
5.在Header Files->StdAfx.h,这个文件的作用又是什么?
6.还有basetsd.h
yjdn 2006-11-26
  • 打赏
  • 举报
回复
再问一些在google上不好搜出来的东西
1.char* 是一个指针?相当于字符串类型么?和Tchar有什么差别?
2.TEXT() 是指什么意思?把字符串变成TCHAR类型的数组?
3.&wndclass 指的是什么意思?
kugou123 2006-11-26
  • 打赏
  • 举报
回复
建立成功后,把上面的代码复制过去。
注意:第二行 #include <windows.h>可以去掉了,因为在stdafx.h中以及包含过了。
kugou123 2006-11-26
  • 打赏
  • 举报
回复
你建立的工程类型不对。

建立Win32 Application 点ok,选“a simple win32 application”
yjdn 2006-11-26
  • 打赏
  • 举报
回复
谢谢楼上
是不是一定要新建的是win32项目?我新建的是控制台项目,把你的代码帖上去后,
报下面两个错误
LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Debug/test.exe : fatal error LNK1120: 1 unresolved externals
kugou123 2006-11-26
  • 打赏
  • 举报
回复
#include "stdafx.h"
#include <windows.h>

//一、消息处理函数
//参数:窗口句柄,消息,消息参数,消息参数
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
//处理感兴趣的消息
switch (message)
{
case WM_DESTROY:
//当用户关闭窗口,窗口销毁,程序需结束,发退出消息,以退出消息循环
PostQuitMessage (0) ;
return 0 ;
}
//其他消息交给由系统提供的缺省处理函数
return ::DefWindowProc (hwnd, message, wParam, lParam) ;
}

//二、应用程序主函数
//参数:实例句柄、前一个实例的句柄、命令行参数、窗口显示方式
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
//1.注册窗口类
static TCHAR szAppName[] = TEXT ("HelloWin") ; //窗口类名称
//定制"窗口类"结构
WNDCLASS wndclass ;
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ; //关联消息处理函数
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ; //实例句柄
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ; //图标
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; //光标
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH); //画刷
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = szAppName; //类名称
//注册
if (!RegisterClass (&wndclass))
{
MessageBox (NULL, TEXT ("RegisterClass Fail!"),
szAppName, MB_ICONERROR) ;
return 0 ;
}

//建立窗口
HWND hwnd ;
hwnd = CreateWindow (szAppName, //窗口类名称
TEXT ("The Hello Program"), //窗口标题
WS_OVERLAPPEDWINDOW, //窗口风格
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance, //实例句柄
NULL);

ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;

//消息循环
MSG msg ;
while (GetMessage (&msg, NULL, 0, 0)) //从消息队列中取消息
{
TranslateMessage (&msg) ; //转换消息
DispatchMessage (&msg) ; //派发消息
}
return msg.wParam ;
}

15,979

社区成员

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

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