📄 helloworld.c
字号:
/*-----------------------------------------------------------------------------------------------------------
HelloWorld.c
------------------------------------------------------------------------------------------------------------*/
#include <windows.h>
#include <windows.c>
#include"resource.h"
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
DWORD WINAPI Thread1(LPVOID);
DWORD WINAPI Thread2(LPVOID);
HANDLE hThread;
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("HelloWorld") ;
HWND hwnd ;
MSG msg ;
WNDCLASS wndclass ;
HMENU hMenu;
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 Windows NT!"),
szAppName, MB_ICONERROR) ;
return 0 ;
}
hMenu=LoadMenu(hInstance,szAppName );
hwnd = CreateWindow (
szAppName,
TEXT ("Hello World!"),
WS_OVERLAPPEDWINDOW
|WS_HSCROLL|WS_VSCROLL,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
hMenu,
hInstance,
NULL) ;
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}
//回调函数1
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
DWORD ThreadID;
DWORD id;
HDC hDCT;
switch (message)
{
case WM_DESTROY:
PostQuitMessage (0) ;
return 0 ;
case WM_LBUTTONDOWN:
//创建线程并运行
hDCT=GetDC(hwnd);
hThread=CreateThread(NULL,0,Thread1,hDCT,NULL,&ThreadID);
return 0;
break;
case WM_RBUTTONDOWN:
//创建线程并运行
hDCT=GetDC(hwnd);
hThread=CreateThread(NULL,0,Thread2,hDCT,NULL,&ThreadID);
return 0;
break;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}
DWORD WINAPI Thread1(LPVOID param)
{
HANDLE hMyMapObj;
char* cMyMapView;
char cInput[128];
HANDLE hMyMapFile;
//新建一个文件
hMyMapFile=CreateFile("C:\\Mark\\Examples\\CreateFileMapping\\FileMap.TXT",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
//建立映射对象
hMyMapObj=CreateFileMapping(hMyMapFile,NULL,PAGE_READWRITE,0,0x1000,"C:\\Mark\\Examples\\CreateFileMapping\\ShareMap.obj");
//把映射对象映射到内存中
cMyMapView=(char*)MapViewOfFile(hMyMapObj,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0);
sprintf(cInput,"0x%xThread1 modified this file!!",GetCurrentThreadID());
//向内存写入文字
memcpy(cMyMapView,cInput,strlen(cInput));
UnmapViewOfFile(cMyMapView);
MessageBox (NULL, TEXT ("Thread1 processed!"),
"tips", MB_ICONINFORMATION) ;
return 1;
}
DWORD WINAPI Thread2(LPVOID param)
{
HANDLE hMyMapObj2;
char* cMyMapView2;
char cOutput[128];
HANDLE hMyMapFile2;
//打开Thread1创建的文件映射对象
hMyMapObj2=OpenFileMapping(FILE_MAP_READ,FALSE,"C:\\Mark\\Examples\\CreateFileMapping\\ShareMap.obj");
cMyMapView2=(char*)MapViewOfFile(hMyMapFile2,FILE_MAP_READ,0,0,0);
strcpy(cOutput,cMyMapView2);
MessageBox (NULL, cOutput,
"tips", MB_ICONINFORMATION) ;
UnmapViewOfFile(cMyMapView2);
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -