① c语言windows.h程序问题
恩,想用C语言做windows窗口界面的话,肯定是要调用windows api函数来完成,而大多数API涵数都在<windows.h>中有声明,所以你要包含它,但是windows程序的运行机制和你平时用C写的控制台程序很不一样,我给出一个例子,你可以参考一下:
/****************************************************************************
* *
* File : main.c *
* *
* Purpose : Generic Win32 application. *
* *
* History : Date Reason *
* 00/00/00 Created *
* *
****************************************************************************/
#define WIN32_LEAN_AND_MEAN /* speed up compilations */
#include <windows.h>
#include <windowsx.h>
#include <commctrl.h>
#include <tchar.h>
#include "main.h"
#define NELEMS(a) (sizeof(a) / sizeof((a)[0]))
/** Prototypes **************************************************************/
static LRESULT WINAPI MainWndProc(HWND, UINT, WPARAM, LPARAM);
static void Main_OnPaint(HWND);
static void Main_OnCommand(HWND, int, HWND, UINT);
static void Main_OnDestroy(HWND);
static LRESULT WINAPI AboutDlgProc(HWND, UINT, WPARAM, LPARAM);
/** Global variables ********************************************************/
static HANDLE ghInstance;
/****************************************************************************
* *
* Function: WinMain *
* *
* Purpose : Initialize the application. Register a window class, *
* create and display the main window and enter the *
* message loop. *
* *
* History : Date Reason *
* 00/00/00 Created *
* *
****************************************************************************/
int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)
{
INITCOMMONCONTROLSEX icc;
WNDCLASS wc;
HWND hwnd;
MSG msg;
ghInstance = hInstance;
/* Initialize common controls. Also needed for MANIFEST's */
/*
* TODO: set the ICC_???_CLASSES that you need.
*/
icc.dwSize = sizeof(icc);
icc.dwICC = ICC_WIN95_CLASSES /*|ICC_COOL_CLASSES|ICC_DATE_CLASSES|ICC_PAGESCROLLER_CLASS|ICC_USEREX_CLASSES|... */;
InitCommonControlsEx(&icc);
/* Load Rich Edit control support */
/*
* TODO: uncomment one of the lines below, if you are using a Rich Edit control.
*/
// LoadLibrary(_T("riched32.dll")); // Rich Edit v1.0
// LoadLibrary(_T("riched20.dll")); // Rich Edit v2.0, v3.0
/*
* TODO: uncomment line below, if you are using the Network Address control (Windows Vista+).
*/
// InitNetworkAddressControl();
/* Register the main window class */
wc.lpszClassName = _T("aaClass");
wc.lpfnWndProc = MainWndProc;
wc.style = CS_OWNDC|CS_VREDRAW|CS_HREDRAW;
wc.hInstance = ghInstance;
wc.hIcon = LoadIcon(ghInstance, MAKEINTRESOURCE(IDR_ICO_MAIN));
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName = MAKEINTRESOURCE(IDR_MNU_MAIN);
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
if (!RegisterClass(&wc))
return 1;
/* Create the main window */
hwnd = CreateWindow(_T("aaClass"),
_T("aa Program"),
WS_OVERLAPPEDWINDOW|WS_HSCROLL|WS_VSCROLL,
0,
0,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
ghInstance,
NULL
);
if (!hwnd) return 1;
/* Show and paint the main window */
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
/* Pump messages until we are done */
#if 0
/* "Politically correct" code -- SEE MICROSOFT DOCUMENTATION */
for (;;)
{
BOOL fRet = GetMessage(&msg, NULL, 0, 0);
if (fRet == -1) /* Error */
{
/* TODO: handle the error from GetMessage() */
__debugbreak();
return -1;
}
else if (fRet == 0) /* WM_QUIT */
{
break;
}
else /* Not error or WM_QUIT */
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
#else
/* "Commonly seen" code */
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
#endif
return msg.wParam;
}
/****************************************************************************
* *
* Function: MainWndProc *
* *
* Purpose : Process application messages. *
* *
* History : Date Reason *
* 00/00/00 Created *
* *
****************************************************************************/
static LRESULT CALLBACK MainWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg)
{
HANDLE_MSG(hwnd, WM_PAINT, Main_OnPaint);
HANDLE_MSG(hwnd, WM_COMMAND, Main_OnCommand);
HANDLE_MSG(hwnd, WM_DESTROY, Main_OnDestroy);
/* TODO: enter more messages here */
default:
return DefWindowProc(hwnd, msg, wParam, lParam);
}
}
/****************************************************************************
* *
* Function: Main_OnPaint *
* *
* Purpose : Process a WM_PAINT message. *
* *
* History : Date Reason *
* 00/00/00 Created *
* *
****************************************************************************/
static void Main_OnPaint(HWND hwnd)
{
PAINTSTRUCT ps;
RECT rc;
BeginPaint(hwnd, &ps);
GetClientRect(hwnd, &rc);
DrawText(ps.hdc, _T("Hello, Windows!"), -1, &rc, DT_SINGLELINE|DT_CENTER|DT_VCENTER);
EndPaint(hwnd, &ps);
}
/****************************************************************************
* *
* Function: Main_OnCommand *
* *
* Purpose : Process a WM_COMMAND message. *
* *
* History : Date Reason *
* 00/00/00 Created *
* *
****************************************************************************/
static void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
switch (id)
{
case IDM_ABOUT:
DialogBox(ghInstance, MAKEINTRESOURCE(DLG_ABOUT), hwnd, (DLGPROC)AboutDlgProc);
/* TODO: Enter more commands here */
}
}
/****************************************************************************
* *
* Function: Main_OnDestroy *
* *
* Purpose : Process a WM_DESTROY message. *
* *
* History : Date Reason *
* 00/00/00 Created *
* *
****************************************************************************/
static void Main_OnDestroy(HWND hwnd)
{
PostQuitMessage(0);
}
/****************************************************************************
* *
* Function: AboutDlgProc *
* *
* Purpose : Process messages for the About dialog. The dialog is *
shown when the user selects "About" in the "Help" menu. *
* *
* History : Date Reason *
* 00/00/00 Created *
* *
****************************************************************************/
static LRESULT CALLBACK AboutDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_INITDIALOG:
/*
* Nothing special to initialize.
*/
return TRUE;
case WM_COMMAND:
switch (wParam)
{
case IDOK:
case IDCANCEL:
/*
* OK or Cancel was clicked, close the dialog.
*/
EndDialog(hDlg, TRUE);
return TRUE;
}
break;
}
return FALSE;
}
这就是windows程序的基本框架
② c语言怎么编出windows窗口
调用window库窗口函数即可创建windows窗口。
必须使用windows的编译器,如VC,MS等等。
RegisterClassEx函数:
该函数注册在随后调用CreateWindow函数和CreateWindowEx函数中使用的窗口类。 RegisterClass函数己经由函数RegisterClassEx函数来代替,但是,如果不需要设置类的小目标则仍然可以使用RegisterClass函数。
CreateWindowEx函数:
该函数创建一个具有扩展风格的层叠式窗口、弹出式窗口或子窗口,其他与CreateWindow函数相同。关于创建窗口和其他参数的内容,请参看CreateWindow。具体仍可见微软的msdn。
消息处理函数WindowProc:
该函数是一个应用程序定义的函数。它处理发送给窗口的消息。WINDPROC类型定义了一个指向该回调函数的指针。WindowProc是用于应用程序定义函数的占位符。
函数原型:
LRESULT CALLBACK WindowProc (HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam);
参数:
hwnd:指向窗口的句柄。
uMsg:指定消息类型。
wParam:指定其余的、消息特定的信息。该参数的内容与UMsg参数值有关。
IParam:指定其余的、消息特定的信息。该参数的内容与uMsg参数值有关。
返回值:返回值就是消息处理结果,它与发送的消息有关。
一个简单的Window的代码如下:#include<Windows.h>
#include<tchar.h>
LRESULTWINAPIWinProc(HWNDhWnd,UINTMsg,WPARAMwParam,LPARAMlParam);
intWinMain(
__inHINSTANCEhInstance,
__in_optHINSTANCEhPrevInstance,
__inLPSTRlpCmdLine,
__inintnShowCmd
)
{
TCHAR*szName=_T("myWindow");
WNDCLASSEXwc={0};
HWNDhWnd=NULL;
MSGMsg={0};
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.cbSize=sizeof(WNDCLASSEX);
wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);//通过函数来设置一个白色的背景,这里大家设置为NULL看看,会很有趣的
wc.hCursor=NULL;//不设置
wc.hIcon=NULL;//不设置
wc.hIconSm=NULL;//不设置
wc.hInstance=hInstance;//当前程序的句柄,hInstance是有系统给传递的
wc.lpfnWndProc=WinProc;//窗口处理过程的回调函数。
wc.lpszClassName=szName;//窗口类的名字。
wc.lpszMenuName=NULL;
wc.style=CS_HREDRAW|CS_VREDRAW;
RegisterClassEx(&wc);//在系统中注册
hWnd=CreateWindowEx(WS_EX_CLIENTEDGE,szName,_T("我的窗口我喜欢"),WS_OVERLAPPEDWINDOW,
200,100,600,400,NULL,NULL,hInstance,NULL);//创建窗口,窗口标题为"我的窗口我喜欢"
if(hWnd==NULL)
{
MessageBox(NULL,_T("There'sanError"),_T("ErrorTitle"),MB_ICONEXCLAMATION|MB_OK);
return0;
}
ShowWindow(hWnd,nShowCmd);//显示窗口
UpdateWindow(hWnd);
//下面是对消息的循环处理,大家先不必管这些,下节课我会细说的
while(GetMessage(&Msg,NULL,0,0))
{
TranslateMessage(&Msg);//翻译消息
DispatchMessage(&Msg);//分派消息
}
returnMsg.message;
}
//消息处理函数
LRESULTWINAPIWinProc(HWNDhWnd,UINTMsg,WPARAMwParam,LPARAMlParam)
{
switch(Msg)//处理消息过程
{
caseWM_DESTROY://响应鼠标单击关闭按钮事件
PostQuitMessage(0);//退出消息队列
return0;//退出函数
}
returnDefWindowProc(hWnd,Msg,wParam,lParam);
}
③ 用C语言写的程序怎样才能脱离Dos,在Windiows环境里运行
??不是吧
一般的都能在windows里运行啊
你说的是不是 运行时系统开了个像DOS的窗口让你的程序在里面运行啊???是的话就是正常的,因为你写的根本就不是WIN32窗口程序,你都没代码让你的程序拥有窗口,系统怎么给你窗口啊?
要不像的话,就要写WIN32的窗口程序,但我总不能在这教你怎么写吧
④ 用c语言用户输入一个数字,你输入的数字XX代表X月X周X天。
C语言实现输入一个日期,格式如20190415,计算出所在月份,是当年的第X天,第X周,参考代码如下:
#include<stdio.h>
intdays(intyear,intmonth,intday)
{
inti,sum=0;
constintday_tab[13]={0,31,28,31,30,31,30,31,31,30,31,30};
for(i=0;i<month;i++)
sum+=day_tab[i];
sum+=day;
if((year%4==0&&year%100!=0||year%400==0)&&month>=3)
sum+=1;
returnsum;
}
intweekday(inty,intm,intd)
{
intt;
if(m==1||m==2){
m+=12;
y--;
}
t=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7;
if(t==0)t=7;
returnt;
}
intmain()
{
inty,m,d;
intds,ws,fd,t;
scanf("%4d%2d%2d",&y,&m,&d);
ds=days(y,m,d);
fd=weekday(y,1,1);
t=ds+fd-1;
ws=t/7;
if(t%7>0)ws++;
printf("是%d年的%d月、第%d天、第%d周",y,m,ds,ws);
return0;
}
⑤ 如何用C语言做一个windows应用程序窗口界面
可以使用CreateWindow函数。
CreateWindow,Windows API宏, 在WinUser.h中根据是否已定义Unicode被分别定义为CreateWindowW和CreateWindowA,后两者又被分别定义为对CreateWindowExW和CreateWindowExA函数的调用。
函数原型:
HWND CreateWindow(
LPCTSTR lpClassName,
LPCTSTR lpWindowName,
DWORD dwStyle,
int x,
int y,
int nWidth,
int nHeight,
HWND hWndParent,
HMENU hMenu,
HANDLE hlnstance,
LPVOID lpParam);
参数:
详情
lpClassName
指向一个空结束的字符串或整型数atom。如果该参数是一个整型量,它是由此前调用theGlobalAddAtom函数产生的全局量。这个小于0xC000的16位数必须是lpClassName参数字的低16位,该参数的高位必须是0。
如果lpClassName是一个字符串,它指定了窗口的类名。这个类名可以是任何用函数RegisterClass注册的类名,或是任何预定义的控制类名。请看说明部分的列表。
LPWindowName
指向一个指定窗口名的空结束的字符串指针。
如果窗口风格指定了标题条,由lpWindowName指向的窗口标题将显示在标题条上。当使用Createwindow函数来创建控制例如按钮,选择框和静态控制时,可使用lpWindowName来指定控制文本。
dwStyle
指定创建窗口的风格。该参数可以是下列窗口风格的组合再加上说明部分的控制风格。风格意义:
WS_BORDER:创建一个带边框的窗口。
WS_CAPTION:创建一个有标题框的窗口(包括WS_BORDER风格)。
WS_CHILD:创建一个子窗口。这个风格不能与WS_POPUP风格合用。
WS_CHILDWINDOW:与WS_CHILD相同。
WS_CLIPCHILDREN:当在父窗口内绘图时,排除子窗口区域。在创建父窗口时使用这个风格。
WS_CLIPSIBLINGS:排除子窗口之间的相对区域,也就是,当一个特定的窗口接收到WM_PAINT消息时,WS_CLIPSIBLINGS 风格将所有层叠窗口排除在绘图之外,只重绘指定的子窗口。如果未指定WS_CLIPSIBLINGS风格,并且子窗口是层叠的,则在重绘子窗口的客户区时,就会重绘邻近的子窗口。
WS_DISABLED:创建一个初始状态为禁止的子窗口。一个禁止状态的窗口不能接受来自用户的输入信息。
WS_DLGFRAME:创建一个带对话框边框风格的窗口。这种风格的窗口不能带标题条。
WS_GROUP:指定一组控制的第一个控制。这个控制组由第一个控制和随后定义的控制组成,自第二个控制开始每个控制,具有WS_GROUP风格,每个组的第一个控制带有WS_TABSTOP风格,从而使用户可以在组间移动。用户随后可以使用光标在组内的控制间改变键盘焦点。
WS_HSCROLL:创建一个有水平滚动条的窗口。
WS_ICONIC:创建一个初始状态为最小化状态的窗口。与WS_MINIMIZE风格相同。
WS_MAXIMIZE:创建一个初始状态为最大化状态的窗口。
WS_MAXIMIZEBOX:创建一个具有最大化按钮的窗口。该风格不能与WS_EX_CONTEXTHELP风格同时出现,同时必须指定WS_SYSMENU风格。
WS_OVERLAPPED:产生一个层叠的窗口。一个层叠的窗口有一个标题条和一个边框。与WS_TILED风格相同。
WS_OVERLAPPEDWINDOW:创建一个具有WS_OVERLAPPED,WS_CAPTION,WS_SYSMENU WS_THICKFRAME,WS_MINIMIZEBOX,WS_MAXIMIZEBOX风格的层叠窗口,与WS_TILEDWINDOW风格相同。
WS_POPUP:创建一个弹出式窗口。该风格不能与WS_CHILD风格同时使用。
WS_POPUPWINDOW:创建一个具有WS_BORDER,WS_POPUP,WS_SYSMENU风格的窗口,WS_CAPTION和WS_POPUPWINDOW必须同时设定才能使窗口某单可见。
WS_SIZEBOX:创建一个可调边框的窗口,与WS_THICKFRAME风格相同。
WS_SYSMENU:创建一个在标题条上带有窗口菜单的窗口,必须同时设定WS_CAPTION风格。
WS_TABSTOP:创建一个控制,这个控制在用户按下Tab键时可以获得键盘焦点。按下Tab键后使键盘焦点转移到下一具有WS_TABSTOP风格的控制。
WS_THICKFRAME:创建一个具有可调边框的窗口,与WS_SIZEBOX风格相同。
WS_TILED:产生一个层叠的窗口。一个层叠的窗口有一个标题和一个边框。与WS_OVERLAPPED风格相同。
WS_TILEDWINDOW:创建一个具有WS_OVERLAPPED,WS_CAPTION,WS_SYSMENU, WS_THICKFRAME,WS_MINIMIZEBOX,WS_MAXIMIZEBOX风格的层叠窗口。与WS_OVERLAPPEDWINDOW风格相同。
WS_VISIBLE:创建一个初始状态为可见的窗口。
WS_VSCROLL:创建一个有垂直滚动条的窗口。
X
指定窗口的初始水平位置。对一个层叠或弹出式窗口,X参数是屏幕坐标系的窗口的左上角的初始X坐标。对于子窗口,x是子窗口左上角相对父窗口客户区左上角的初始X坐标。如果该参数被设为CW_USEDEFAULT则系统为窗口选择缺省的左上角坐标并忽略Y参数。CW_USEDEFAULT只对层叠窗口有效,如果为弹出式窗口或子窗口设定,则X和y参数被设为零。
Y
指定窗口的初始垂直位置。对一个层叠或弹出式窗口,y参数是屏幕坐标系的窗口的左上角的初始y坐标。对于子窗口,y是子窗口左上角相对父窗口客户区左上角的初始y坐标。对于列表框,y是列表框客户区左上角相对父窗口客户区左上角的初始y坐标。如果层叠窗口是使用WS_VISIBLE风格位创建的并且X参数被设为CW_USEDEFAULT,则系统将忽略y参数。
nWidth
以设备单元指明窗口的宽度。对于层叠窗口,nWidth或是屏幕坐标的窗口宽度或是CW_USEDEFAULT。若nWidth是CW_USEDEFAULT,则系统为窗口选择一个缺省的高度和宽度:缺省宽度为从初始X坐标开始到屏幕的右边界,缺省高度为从初始Y坐标开始到目标区域的顶部。CW_USEDEFAULT只对层叠窗口有效;如果为弹出式窗口和子窗口设定CW_USEDEFAULT标志则nWidth和nHeight被设为零。
nHeight
以设备单元指明窗口的高度。对于层叠窗口,nHeight是屏幕坐标的窗口宽度。若nWidth被设为CW_USEDEFAULT,则系统忽略nHeight参数。
hWndParent
指向被创建窗口的父窗口或所有者窗口的句柄。若要创建一个子窗口或一个被属窗口,需提供一个有效的窗口句柄。这个参数对弹出式窗口是可选的。Windows NT 5.0;创建一个消息窗口,可以提供HWND_MESSAGE或提供一个己存在的消息窗口的句柄。
hMenu
菜单句柄,或依据窗口风格指明一个子窗口标识。对于层叠或弹出式窗口,hMenu指定窗口使用的菜单:如果使用了菜单类,则hMenu可以为NULL。对于子窗口,hMenu指定了该子窗口标识(一个整型量),一个对话框使用这个整型值将事件通知父类。应用程序确定子窗口标识,这个值对于相同父窗口的所有子窗口必须是唯一的。
hlnstance
与窗口相关联的模块实例的句柄。
lpParam
指向一个值的指针,该值传递给窗口WM_CREATE消息。该值通过在IParam参数中的CREATESTRUCT结构传递。如果应用程序调用CreateWindow创建一个MDI客户窗口,则lpParam必须指向一个CLIENTCREATESTRUCT结构。
返回值:如果函数成功,返回值为新窗口的句柄:如果函数失败,返回值为NULL。若想获得更多错误信息,请调用GetLastError函数。例程:
//Window.cpp:.
#include<windows.h>
LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);
intAPIENTRYWinMain(HINSTANCEhInstance,//应用程序的实例句柄,
HINSTANCEhPrevInstance,
LPSTRlpCmdLine,//命令行
intnCmdShow)//显示方式
{
MSGmsg;
HWNDhWnd;
charszTitle[]="系统信息";//Thetitlebartext
charszWindowClass[]="popMsg";//Thetitlebartext
WNDCLASSEXwcex={0};
wcex.cbSize=sizeof(WNDCLASSEX);//WNDCLASSEX结构体大小
wcex.style=CS_HREDRAW|CS_VREDRAW;//位置改变时重绘
wcex.lpfnWndProc=(WNDPROC)WndProc;//消息处理函数
wcex.hInstance=0;//当前实例句柄
wcex.hbrBackground=(HBRUSH)COLOR_WINDOWFRAME;//背景色
wcex.lpszClassName=szWindowClass;//参窗口类名
wcex.hIcon=0;//图标
wcex.hCursor=LoadCursor(NULL,IDC_ARROW);//光标
wcex.lpszMenuName=0;//菜单名称
wcex.hIconSm=0;//最小化图标
RegisterClassEx(&wcex);//注册窗口类
hWnd=CreateWindow(szWindowClass,szTitle,WS_SYSMENU|WS_VISIBLE,//创建窗口
CW_USEDEFAULT,CW_USEDEFAULT,400,300,NULL,NULL,0,NULL);
if(!hWnd){
returnFALSE;
}
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);
while(GetMessage(&msg,NULL,0,0))//消息循环:
{
TranslateMessage(&msg);//转化虚拟按键到字符消息
DispatchMessage(&msg);//分派消息调用回调函数
}
returnmsg.wParam;
}
LRESULTCALLBACKWndProc(HWNDhWnd,UINTmessage,WPARAMwParam,LPARAMlParam)
{
PAINTSTRUCTps;
HDChdc;
RECTrect;
switch(message)
{
caseWM_PAINT://重绘消息
hdc=BeginPaint(hWnd,&ps);
GetClientRect(hWnd,&rect);
MoveToEx(hdc,10,10,0);
SelectObject(hdc,::CreatePen(PS_SOLID,1,RGB(0xFF,0,0)));
LineTo(hdc,100,200);
//DrawText(hdc,szHello,strlen(szHello),&rt,DT_CENTER);
EndPaint(hWnd,&ps);
break;
caseWM_CREATE:
RegisterHotKey(hWnd,1,0,0x41);
break;
caseWM_HOTKEY:
MessageBox(0,0,0,0);
break;
caseWM_TIMER:
break;
caseWM_DESTROY://窗口销毁消息
PostQuitMessage(0);
break;
default:
returnDefWindowProc(hWnd,message,wParam,lParam);
}
return0;
}
⑥ 学c语言如何做出有界面的程序
1、新建一个C项目,点击文件,新建,项目,选择C++Win32控制台应用。
⑦ c语言Win32程序设计,无法显示结果,WS_VISIBLE
窗口显示风格问题出错吧
⑧ 国二我想同时报WS office和C语言,可以么
可以,网上报名的网站上有提示的
⑨ c语言可以编译windows下的程序吗
学windows消息机制
学windows api就可以了
下面是最简单的了
#include <windows.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HINSTANCE g_hInst;
LPSTR lpszClass="TextOut";
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance
,LPSTR lpszCmdParam,int nCmdShow)
{
HWND hWnd;
MSG Message;
WNDCLASS WndClass;
g_hInst=hInstance;
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.lpfnWndProc=(WNDPROC)WndProc;
WndClass.lpszClassName=lpszClass;
WndClass.lpszMenuName=NULL;
WndClass.style=CS_HREDRAW | CS_VREDRAW;
RegisterClass(&WndClass);
hWnd=CreateWindow(lpszClass,"My First Program",WS_OVERLAPPEDWINDOW | WS_VSCROLL,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
NULL,(HMENU)NULL,hInstance,NULL);
ShowWindow(hWnd,nCmdShow);
while(GetMessage(&Message,0,0,0)) {
TranslateMessage(&Message);
DispatchMessage(&Message);
}
return Message.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rt={100,100,400,300};
char str[]=" "
""
"sadfsadfasdfdsfasdf"
"";
switch(iMessage) {
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_PAINT:
hdc=BeginPaint(hWnd,&ps);
DrawText(hdc,str,-1,&rt,DT_CENTER | DT_WORDBREAK);
// SetTextAlign(hdc, TA_CENTER);
// TextOut(hdc,200,60,"Beautiful Korea",15);
// TextOut(hdc,200,80,"is",2);
// TextOut(hdc,200,100,"My Lovely Home Country",22);
EndPaint(hWnd,&ps);
return 0;
/* case WM_LBUTTONDOWN:
hdc=GetDC(hWnd);
TextOut(hdc,100,100,"Beautiful Korea",15);
ReleaseDC(hWnd, hdc);
return 0;
*/
}
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
⑩ C语言问题。我要完整的可通过编译的在WINxp下用C和API写透明窗口的代码。
CreateWindowEx(WS_EX_LAYERED|WS_EX_TRANSPARENT,......) 创建一个分层和透明的窗口