用C++编的一个小程序,运行后只有进程,没有窗口,这是为什么?程序如下

用C++编的一个小程序,运行后只有进程,没有窗口,这是为什么?程序如下,第1张

#include <Windows.h>

#include <stdio.h>

LRESULT CALLBACK yxgProc(

HWND hwnd,

UINT uMsg,

WPARAM wParam,

LPARAM lParam )

int WINAPI WinMain(

HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPSTRlpCmdLine,

int nShowCmd )

{

WNDCLASS wndcls

wndcls.cbClsExtra=0/// 这里重复设置了, 并且漏设置了 wndcls.cbWndExtra= 0

wndcls.cbClsExtra=0

wndcls.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH)

wndcls.hCursor=LoadCursor(NULL,IDC_HAND)

wndcls.hIcon=LoadIcon(NULL,IDI_INFORMATION)

wndcls.hInstance=hInstance

wndcls.lpfnWndProc=yxgProc

wndcls.lpszClassName="yxg"

wndcls.lpszMenuName=NULL

wndcls.style=CS_HREDRAW|CS_VREDRAW

RegisterClass(&wndcls)

HWND hwnd

hwnd=CreateWindow("yxg","严祥光",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,

CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL)

ShowWindow(hwnd,SW_SHOWNORMAL)

UpdateWindow(hwnd)

MSG msg

while(GetMessage(&msg,hwnd,0,0))

{

TranslateMessage(&msg)

DispatchMessage(&msg)

}

return 0

}

LRESULT CALLBACK yxgProc(

HWND hwnd,

UINT uMsg,

WPARAM wParam,

LPARAM lParam )

{

switch (uMsg)

{

case WM_PAINT:

HDC hdc

PAINTSTRUCT ps

hdc=BeginPaint(hwnd,&ps)

TextOut(hdc,0,0,"我们都是好孩子",strlen("我们都是好孩子"))

EndPaint(hwnd,&ps)

break

case WM_CLOSE:

DestroyWindow(hwnd)

break

case WM_DESTROY:

PostQuitMessage(0)

break

default:

return DefWindowProc(hwnd,uMsg,wParam,lParam)

}

return 0

}

VC-摄像头控制SDK源码

#include <windows.h>

#include <stdio.h>

#include <vfw.h>

#pragma comment(lib,"vfw32.lib")

HWND ghWndCap //捕获窗的句柄

CAPDRIVERCAPS gCapDriverCaps //视频驱动器的能力

CAPSTATUS gCapStatus //捕获窗的状态

char szCaptureFile[] = "MYCAP.AVI"

char gachBuffer[20]

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM)

LRESULT CALLBACK StatusCallbackProc(HWND hWnd,int nID,LPSTR lpStatusText)

{

if(!ghWndCap)return FALSE//获得捕获窗的状态

capGetStatus(ghWndCap,&gCapStatus,sizeof(CAPSTATUS))//更新捕获窗的大小

SetWindowPos(ghWndCap,NULL,0,0,gCapStatus.uiImageWidth,gCapStatus.uiImageHeight,SWP_NOZORDER|SWP_NOMOVE)

if(nID==0){//清除旧的状态信息

SetWindowText(ghWndCap,(LPSTR)"hello")

return (LRESULT)TRUE

}//显示状态ID和状态文本

wsprintf(gachBuffer,"Status# %d: %s",nID,lpStatusText)

SetWindowText(ghWndCap,(LPSTR)gachBuffer)

return (LRESULT)TRUE

}

LRESULT CALLBACK ErrorCallbackProc(HWND hWnd,int nErrID,LPSTR lpErrorText)

{

if(!ghWndCap)return FALSE

if(nErrID==0)return TRUE//清除旧的错误

wsprintf(gachBuffer,"Error# %d",nErrID)//显示错误标识和文本

MessageBox(hWnd, lpErrorText, gachBuffer,MB_OK | MB_ICONEXCLAMATION)

return (LRESULT) TRUE

}

LRESULT CALLBACK FrameCallbackProc(HWND hWnd,LPVIDEOHDR lpVHdr)

{

FILE *fp

fp=fopen("caram.dat","w")

if(!ghWndCap)return FALSE//假设fp为一打开的.dat文件指针

fwrite(lpVHdr->lpData,1,lpVHdr->dwBufferLength,fp)

return (LRESULT)TRUE

}

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)

{

static TCHAR szAppName[]=TEXT("HelloWin")

HWND hwnd

MSG msg

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("This program requires WindowsNT!"),szAppName,MB_ICONERROR)

return 0

}

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)

while(GetMessage(&msg,NULL,0,0))

{

TranslateMessage(&msg)

DispatchMessage(&msg)

}

return msg.wParam

}

LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)

{

HDC hdc

PAINTSTRUCT ps

RECT rect

switch(message)

{

case WM_CREATE:

{

ghWndCap=capCreateCaptureWindow((LPSTR)"Capture Window",WS_CHILD|WS_VISIBLE,0,0,300,240,(HWND)hwnd,(int)0)

capSetCallbackOnError(ghWndCap,(FARPROC)ErrorCallbackProc)

capSetCallbackOnStatus(ghWndCap,(FARPROC)StatusCallbackProc)

capSetCallbackOnFrame(ghWndCap,(FARPROC)FrameCallbackProc)

capDriverConnect(ghWndCap,0)// 将捕获窗同驱动器连接

//获得驱动器的能力,相关的信息放在结构变量gCapDriverCaps中

capDriverGetCaps(ghWndCap,&gCapDriverCaps,sizeof(CAPDRIVERCAPS))

capPreviewRate(ghWndCap, 66)// 设置Preview模式的显示速率

capPreview(ghWndCap, TRUE)//启动Preview模式

if(gCapDriverCaps.fHasOverlay) //检查驱动器是否有叠加能力

capOverlay(ghWndCap,TRUE)//启动Overlay模式

if(gCapDriverCaps.fHasDlgVideoSource)capDlgVideoSource(ghWndCap)//Video source 对话框

if(gCapDriverCaps.fHasDlgVideoFormat)capDlgVideoFormat(ghWndCap)// Video format 对话框

if(gCapDriverCaps.fHasDlgVideoDisplay)capDlgVideoDisplay(ghWndCap)// Video display 对话框

capFileSetCaptureFile( ghWndCap, szCaptureFile)//指定捕获文件名

capFileAlloc(ghWndCap, (1024L * 1024L * 5))//为捕获文件分配存储空间

capCaptureSequence(ghWndCap)//开始捕获视频序列

capGrabFrame(ghWndCap)//捕获单帧图像

}

return 0

case WM_PAINT:

hdc=BeginPaint(hwnd,&ps)

GetClientRect(hwnd,&rect)

DrawText(hdc,TEXT("Hello,Windows98!"),-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER)

EndPaint(hwnd,&ps)

return 0

case WM_DESTROY:

{

capSetCallbackOnStatus(ghWndCap,NULL)

capSetCallbackOnError(ghWndCap,NULL)

capSetCallbackOnFrame(ghWndCap,NULL)

capCaptureAbort(ghWndCap)//停止捕获

capDriverDisconnect(ghWndCap)//将捕获窗同驱动器断开

PostQuitMessage(0)

}

return 0

}

return DefWindowProc(hwnd,message,wParam,lParam)

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11828320.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存