ホームに戻る
オリジナルリソースの使用
// resource.rc
ORIGINAL RESOURCE "o_r.res"
以上を resource.rc に記述して保存
o_r.res には適当な文字列を書いておきます。
#include <windows.h>
#define ID_B1 1
#define WINDOW_CLASS_NAME "WinClassName"
#define WINDOW_NAME "WinName"
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
static HINSTANCE g_hInst;
int ConsoleOut(char *s){
DWORD sz;
HANDLE hOut = CreateFile("CONOUT$", GENERIC_WRITE,
0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if(hOut != INVALID_HANDLE_VALUE){
WriteFile(hOut, s, strlen(s), &sz, NULL);
CloseHandle(hOut);
}
else{
return 0;
}
return 1;
}
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow)
{
MSG msg;
WNDCLASS wc;
HWND hWnd;
// Register Class
if(hPrevInst == NULL)
{
ZeroMemory(&wc, sizeof(wc));
wc.lpfnWndProc = (WNDPROC)WndProc;
wc.hInstance = hInst;
wc.hIcon = LoadIcon((HINSTANCE)NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor((HINSTANCE)NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)COLOR_BACKGROUND;
wc.lpszClassName = WINDOW_CLASS_NAME;
if(RegisterClass(&wc) == 0){
return 0;
}
}
g_hInst = hInst;
// CreateWindow
hWnd = CreateWindow(WINDOW_CLASS_NAME, WINDOW_NAME, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
(HWND)NULL, (HMENU)NULL, hInst, (LPVOID)NULL);
if(hWnd == NULL){
return 0;
}
if(!AllocConsole())return 0;
// ShowWindow, UpdateWindow
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
// Message Loop
while(GetMessage(&msg, (HWND)NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
FreeConsole();
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){
static HWND hButton1;
static char *c;
HGLOBAL hGlobal;
switch(uMsg){
case WM_CREATE:
hButton1 = CreateWindow("BUTTON", "Button1",
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
10, 10, 80, 20,
hWnd, (HMENU)ID_B1, g_hInst ,NULL);
hGlobal = LoadResource(
((LPCREATESTRUCT)(lParam))->hInstance,
FindResource(((LPCREATESTRUCT)(lParam))->hInstance,
TEXT("ORIGINAL"), TEXT("RESOURCE")));
c = (char *)LockResource(hGlobal);
case WM_SIZE:
MoveWindow(hButton1, 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE);
return 0;
case WM_COMMAND:
switch(LOWORD(wParam)){
case ID_B1:
ConsoleOut(c);
return 0;
}
return DefWindowProc(hWnd, uMsg, wParam, lParam);
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}