⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 miniwin.cpp

📁 MiniWinOuterSM MiniWinOuterSM
💻 CPP
字号:
// MiniWin.cpp : Defines the entry point for the application.
//

#include "stdafx.h"
#include "resource.h"
#include "stdio.h"
#include "MiniWin.h"
#include "memwatch.h"
#include <stdlib.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <io.h>
#include"winsock2.h"
#include "PrDbg.h"
#include"time.h"
#include "PrGfx.h"
//#include"waba.h"
#include<stdlib.h> 
#include"wingdi.h"
#include"windows.h"
#define MAX_LOADSTRING 100
HINSTANCE hInst;								// current instance
TCHAR szTitle[MAX_LOADSTRING];								// The title bar text
TCHAR szWindowClass[MAX_LOADSTRING];								// The title bar text
ATOM				MyRegisterClass(HINSTANCE hInstance);
BOOL				InitInstance(HINSTANCE, int);
LRESULT CALLBACK	WndProc(HWND, UINT, WPARAM, LPARAM);
#if 1//define 0 to test Waba JVM
extern "C" int MWSystemInit(void);
extern "C" int MWSystemTerm(void);
extern "C" int DVBInit(void);
int APIENTRY WinMain(HINSTANCE hInstance, 
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
	MSG msg;
	DIBSECTION dib;
	BITMAP bmp;
	//LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
	int cx=GetSystemMetrics(SM_CXICONSPACING);
	int xy=GetSystemMetrics(SM_CYICONSPACING);
	xy=GetSystemMetrics(SM_CXDLGFRAME);
	xy-= GetSystemMetrics(SM_CXEDGE);
	LoadString(hInstance, IDC_MINIWIN, szWindowClass, MAX_LOADSTRING);
	MyRegisterClass(hInstance);
	lpCmdLine;nCmdShow;hInstance;hPrevInstance;
	AllocConsole();
	freopen("CONOUT$","w",stdout);
	if (!InitInstance (hInstance, nCmdShow)) 
		return FALSE; 
	while(GetMessage(&msg, NULL, 0, 0)){ 
		TranslateMessage(&msg);
		DispatchMessage(&msg);  
	}
	
	MWSystemTerm();
	FreeConsole();
	return msg.wParam;
}

#endif
//  FUNCTION: MyRegisterClass()
//  PURPOSE: Registers the window class.
//  COMMENTS: This function and its usage is only necessary if you want this code
//    to be compatible with Win32 systems prior to the 'RegisterClassEx' function
//    that was added to Windows 95. It is important to call this function so that t
//    he application will get 'well formed' small icons associated  with it.
#if 1
ATOM MyRegisterClass(HINSTANCE hInstance)
{
	WNDCLASSEX wcex;
	wcex.cbSize = sizeof(WNDCLASSEX); 
	wcex.style			= CS_HREDRAW | CS_VREDRAW;
	wcex.lpfnWndProc	= (WNDPROC)WndProc;
	wcex.cbClsExtra		= 0;	wcex.cbWndExtra		= 0;
	wcex.hInstance		= hInstance;
	wcex.hIcon			= LoadIcon(hInstance, (LPCTSTR)IDI_MINIWIN);
	wcex.hCursor		= LoadCursor(NULL, IDC_ARROW);
	wcex.hbrBackground	= (HBRUSH)(COLOR_WINDOW+1);
	wcex.lpszMenuName	= (LPCSTR)IDC_MINIWIN;
	wcex.lpszClassName	= szWindowClass;
	wcex.hIconSm		= LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);
	return RegisterClassEx(&wcex);
}
#endif

//   FUNCTION: InitInstance(HANDLE, int)
//   PURPOSE: Saves instance handle and creates main window
//   COMMENTS:In this function, we save the instance handle in a global variable and
//        create and display the main program window.
//extern "C" void FatTest(void);

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   HWND hWnd;
   hInst = hInstance; // Store instance handle in our global variable
   hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
   if (!hWnd)
      return FALSE;
   WSADATA wsa;
   WSAStartup(MAKEWORD(2,2),&wsa);//网络必须启动,否则FILTER和打印不能工作
   maindc=GetDC(hWnd);//这里不要更改否则OSD没办法工作
   //FatTest();
   int sc=GetSystemMetrics(SM_CXVSCROLL);
   SetWindowPos(hWnd,0,50,50,730,630,SWP_SHOWWINDOW);
   //SetTimer(hWnd,100,10,NULL);	
   MWSystemInit();
#ifdef DVB 
   DVBInit();
#endif
	for(int i=0;i<0;i++){
		COLORREF cl=GetSysColor(i);
		PrDbgPrintf("RGB(0x%02X,0x%02X,0x%02X),//SYSCOLOR %d\r\n",
			GetRValue(cl),GetGValue(cl),GetBValue(cl),i);
	}
   ShowWindow(hWnd, nCmdShow);
   return TRUE;
}

//**********************************************************************
#if 1
HBITMAP   CopyDCToBitmap(HDC hScrDC,LPRECT lpRect)   
{   
	HDC                 hMemDC;               
	//   屏幕和内存设备描述表   
	HBITMAP         hBitmap,hOldBitmap;         
	//   位图句柄   
	int               nX,   nY,   nX2,   nY2;               
	//   选定区域坐标   
	int               nWidth,   nHeight;               
	//   位图宽度和高度   
    
	//   确保选定区域不为空矩形   
	if   (IsRectEmpty(lpRect))   
		return   NULL;   
    
	//   获得选定区域坐标   
	nX   =   lpRect->left;   
	nY   =   lpRect->top;   
	nX2   =   lpRect->right;   
	nY2   =   lpRect->bottom;   
	nWidth   =   nX2   -   nX;   
	nHeight   =   nY2   -   nY;   
	//为屏幕设备描述表创建兼容的内存设备描述表   
	hMemDC   =   CreateCompatibleDC(hScrDC);   
	//   创建一个与屏幕设备描述表兼容的位图   
	hBitmap   =   CreateCompatibleBitmap(hScrDC,   nWidth,   nHeight);   
	//   把新位图选到内存设备描述表中   
	hOldBitmap   =   (HBITMAP)SelectObject(hMemDC,   hBitmap);   
	//   把屏幕设备描述表拷贝到内存设备描述表中   
	StretchBlt(hMemDC,0,0,nWidth,nHeight,hScrDC,nX,nY,nWidth,nHeight,SRCCOPY);   
	//BitBlt(hMemDC,   0,   0,   nWidth,   nHeight,hScrDC,   nX,   nY,   SRCCOPY);   
	//得到屏幕位图的句柄     
    
	hBitmap   =   (HBITMAP)SelectObject(hMemDC,   hOldBitmap);   
	//清除     
    
	// DeleteDC(hScrDC);   
	DeleteDC(hMemDC);   
	DeleteObject(hOldBitmap);   
	//   返回位图句柄   
	return   hBitmap;   
}   

int CaptureScreen(HBITMAP hBitmap,const char* FileName)
{
	HDC   hDC;   
	//当前分辨率下每象素所占字节数   
	int   iBits;   
	//位图中每象素所占字节数   
	WORD   wBitCount;   
	//定义调色板大小,   位图中像素字节大小   ,位图文件大小   ,   写入文件字节数     
	DWORD   dwPaletteSize=0,   dwBmBitsSize=0,   dwDIBSize=0,   dwWritten=0;     
	//位图属性结构     
	BITMAP   Bitmap;       
	//位图文件头结构   
	BITMAPFILEHEADER   bmfHdr;       
	//位图信息头结构     
	BITMAPINFOHEADER   bi;       
	//指向位图信息头结构       
	LPBITMAPINFOHEADER   lpbi;       
	//定义文件,分配内存句柄,调色板句柄     
	HANDLE   fh,   hDib,   hPal,hOldPal=NULL;     
    
	//计算位图文件每个像素所占字节数     
	hDC   =   CreateDC("DISPLAY",   NULL,   NULL,   NULL);   
	iBits   =   GetDeviceCaps(hDC,   BITSPIXEL)   *   GetDeviceCaps(hDC,   PLANES);     
	DeleteDC(hDC);     
	if   (iBits   <=   1) wBitCount   =   1;     
	else   if   (iBits   <=   4)   wBitCount   =   4;     
	else   if   (iBits   <=   8)   wBitCount   =   8;     
	else   wBitCount   =   24;     
    
	GetObject(hBitmap,   sizeof(Bitmap),   (LPSTR)&Bitmap);   
	bi.biSize =   sizeof(BITMAPINFOHEADER);   
	bi.biWidth =   Bitmap.bmWidth;   
	bi.biHeight =   Bitmap.bmHeight;   
	bi.biPlanes =   1;   
	bi.biBitCount =   wBitCount;   
	bi.biCompression =   BI_RGB;   
	bi.biSizeImage =   0;   
	bi.biXPelsPerMeter =   0;   
	bi.biYPelsPerMeter =   0;   
	bi.biClrImportant =   0;   
	bi.biClrUsed =   0;   
    
	dwBmBitsSize   =   ((Bitmap.bmWidth   *   wBitCount   +   31)   /   32)   *   4   *   Bitmap.bmHeight;   
    
	//为位图内容分配内存     
	hDib   =   GlobalAlloc(GHND,dwBmBitsSize   +   dwPaletteSize   +   sizeof(BITMAPINFOHEADER));     
	lpbi   =   (LPBITMAPINFOHEADER)GlobalLock(hDib);     
	*lpbi   =   bi;     
    
	//   处理调色板       
	hPal   =   GetStockObject(DEFAULT_PALETTE);     
	if(hPal){     
		hDC   =   ::GetDC(NULL);     
		//hDC   =   m_pDc->GetSafeHdc();   
		hOldPal   =   ::SelectPalette(hDC,   (HPALETTE)hPal,   FALSE);     
		RealizePalette(hDC);     
	}   
	//   获取该调色板下新的像素值     
	GetDIBits(hDC,   hBitmap,   0,   (UINT)   Bitmap.bmHeight,   (LPSTR)lpbi   +   sizeof(BITMAPINFOHEADER)     
		+dwPaletteSize, (BITMAPINFO   *)lpbi,   DIB_RGB_COLORS);     
    
	//恢复调色板       
	if(hOldPal){     
		::SelectPalette(hDC,   (HPALETTE)hOldPal,   TRUE);     
		RealizePalette(hDC);     
		::ReleaseDC(NULL,   hDC);     
	}     
    
    
	//创建位图文件       
	fh   =   CreateFile(FileName,   GENERIC_WRITE,0,   NULL,   CREATE_ALWAYS,     
		FILE_ATTRIBUTE_NORMAL   |   FILE_FLAG_SEQUENTIAL_SCAN,   NULL);     
    
	if   (fh   ==   INVALID_HANDLE_VALUE)     return   FALSE;     
    
	//   设置位图文件头     
	bmfHdr.bfType   =   0x4D42;   //   "BM"     
	dwDIBSize   =   sizeof(BITMAPFILEHEADER)   +   sizeof(BITMAPINFOHEADER)   +   dwPaletteSize   +   dwBmBitsSize;       
	bmfHdr.bfSize   =   dwDIBSize;     
	bmfHdr.bfReserved1   =   0;     
	bmfHdr.bfReserved2   =   0;     
	bmfHdr.bfOffBits   =   (DWORD)sizeof(BITMAPFILEHEADER)   +   (DWORD)sizeof(BITMAPINFOHEADER)   +   dwPaletteSize;     
	//   写入位图文件头     
	WriteFile(fh,   (LPSTR)&bmfHdr,   sizeof(BITMAPFILEHEADER),   &dwWritten,   NULL);     
	//   写入位图文件其余内容     
	WriteFile(fh,   (LPSTR)lpbi,   dwDIBSize,   &dwWritten,   NULL);     
	//清除       
	GlobalUnlock(hDib);     
	GlobalFree(hDib);     
	CloseHandle(fh);     
    return 1;
}
extern "C" void MwHandleMouseStatus(INT newx,INT newy,INT newbuttons);
extern "C" BOOL PostMessageToMW(HWND hWnd,UINT iMsg,WPARAM wParam,LPARAM lParam);
void test(HDC hdc)
{
#define XX 50
		HDC hmemdc=CreateCompatibleDC(hdc);
		HBITMAP hbmp=CreateCompatibleBitmap(hdc,XX,XX);
		HBRUSH nb,ob;
		HPEN np,op;
		RECT rc;
		BITMAP bmp;
		SelectObject(hmemdc,hbmp);
		SetRect(&rc,0,0,XX,XX);
		nb=CreateSolidBrush(RGB(255,0,0));
		np=CreatePen(PS_SOLID,1,RGB(0,0,255));
		ob=(HBRUSH)SelectObject(hmemdc,nb);
		op=(HPEN)SelectObject(hmemdc,np);
		Rectangle(hmemdc,0,0,XX,XX);
		SelectObject(hmemdc,ob);
		DeleteObject(nb);
		nb=CreateSolidBrush(RGB(0,200,0));
		ob=(HBRUSH)SelectObject(hmemdc,nb);
		Ellipse(hmemdc,0,0,XX,XX);
		MoveToEx(hmemdc,0,0,NULL);
		LineTo(hmemdc,XX,XX);
		SelectObject(hmemdc,op);
		DeleteObject(np);
		np=CreatePen(PS_SOLID,1,RGB(255,0,0));
		op=(HPEN)SelectObject(hmemdc,np);
		MoveToEx(hmemdc,0,XX,NULL);LineTo(hmemdc,XX,0);
		nb=CreatePatternBrush(hbmp);
		ob=(HBRUSH)SelectObject(hdc,nb);
		RoundRect(hdc,10,10,650,500,80,60);
		SelectObject(hmemdc,ob);
		SelectObject(hmemdc,op);
		DeleteDC(hmemdc);
		GetObject(hbmp,sizeof(BITMAP),&bmp);
		DeleteObject(hbmp);
		StretchBlt(hdc,10,10,400,120,hdc,10,540,100,32,0);
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	PAINTSTRUCT ps;
	TCHAR szHello[MAX_LOADSTRING];
//	PRInputEvent evt;
	LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);
	int xx = GetSystemMetrics(SM_CXFRAME) - GetSystemMetrics(SM_CXDLGFRAME);
    xx = GetSystemMetrics(SM_CYFRAME) - GetSystemMetrics(SM_CYDLGFRAME);
	xx=GetSystemMetrics(SM_CYSMCAPTION);
	switch (message) 
	{
	case WM_PAINT:
		{
			HDC hdc;
			hdc=BeginPaint(hWnd,&ps);
			if(scrdev.UpdateRect)scrdev.UpdateRect(&scrdev,0,0,720,576);
			EndPaint(hWnd,&ps); 
		}break;
	case WM_TIMER:
		PostMessageToMW(NULL,WM_KEYDOWN,wParam,lParam);
		break;
	case WM_COMMAND:
		if(LOWORD(wParam)==IDM_ABOUT)
			DialogBox(NULL,MAKEINTRESOURCE(IDD_ABOUTBOX),NULL,NULL);
		if(LOWORD(wParam)==IDM_CAPTURE){
			RECT rc={0,0,720,576};
			char fname[256];
			static int count=0;
			HDC hdc=GetDC(hWnd);
			HBITMAP hBmp=CopyDCToBitmap(hdc,&rc); 
			sprintf(fname,"bmp%03d.bmp",count++);
			CaptureScreen(hBmp,fname);  
			DeleteObject(hBmp);
			ReleaseDC(hWnd,hdc);
		}
		break;
	case WM_LBUTTONUP:
	case WM_RBUTTONUP:
		MwHandleMouseStatus(LOWORD(lParam),HIWORD(lParam),wParam);
		break;
	case WM_RBUTTONDOWN:
	case WM_LBUTTONDOWN:
		{
			MwHandleMouseStatus(LOWORD(lParam),HIWORD(lParam),wParam);
		}break;
	case WM_MOUSEMOVE:
			MwHandleMouseStatus(LOWORD(lParam),HIWORD(lParam),wParam&0x0F);
			break;
	case WM_KEYDOWN:
		switch(wParam){
		case 0x5D:
		case VK_F1:
		case VK_RMENU:wParam=VK_MENU;PrDbgPrintf("recv VK_MENU\n");
			break;
		default:break;				
		}
		if(wParam){
			PostMessageToMW(NULL,WM_KEYDOWN,wParam,lParam);
		}break;
	case WM_DESTROY:PostQuitMessage(0);	break;
	default:return DefWindowProc(hWnd, message, wParam, lParam);
   }
   return 0;
}
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -