BeatWord Win32 Ήƃ

$Id: 16to32memo.txt,v 1.9 1999/07/24 14:47:19 kudou Exp $

Windows 3.1 pɍꂽ 16-bit  BeatWord  Win32 Ή
ۂ̃łB藯߂ȂełA16-bit  Windows Av
 32-bit 鎑ɂȂ邩Ȃ̂ŁAzzt@CɊ܂
܂B

 int OƂ attribute VXe

BeatWord  attribute VXe int O

AttCodes ŁAUNKNOWN = (int) 0x8000  enum l`ĂB
(enum/int)ƃAgr[gl(short int)Ƃ̔rg
ɂ莸sĂB

܂At@C̓ǂݍ݂ŁAword -> int ̕gĂ
B̂߁AUNKNOWN ̒l 0xffff8000 ɂBȂA
g(word -> int)Aint -> word ̃LXgłlωȂB

 ̑

 }EX֘ÃbZ[W̏̍W̃oOC

}EX֘ÃbZ[WŎ̂悤ɍWoĂꍇA
}CiX̒lꍇAƕgȂ肪
B

int x = LOWORD(lParam);
int y = HIWORD(lParam);

̂悤ȕ́A16-bit ̃R[ĥ悤ɏ 32-bit
ΉKvB

int x = (int)((short int)LOWORD(lParam));
int y = (int)((short int)HIWORD(lParam));

ƂKvB
CC֐`Agp悤ɂB

inline void LPARAM_TO_POINT(LPARAM_T lParam, POINT& p)
inline int LPARAM_TO_X (LPARAM_T lParam)
inline int LPARAM_TO_X (LPARAM_T lParam)

 DefWindowProc ̃bv֐̌^̏C

NT  BeatWord 𓮍삳ƂA^Cgo[̔NCAg
̈悪Abvf[gȂoOCB
DefWindowProc ֘AA16-bit Windows ̌^̂܂܂B
 32-bit Windows ̌^ɕύX邱ƂŏCꂽB

Window Hook ̌^ 16 bit ̂܂܂ŁAԈĎgĂB
PWordPresentation::HelpHookProc 
̌^^ɏCB

 exe ̃ACR

bw3.exe GNXv[ŕ\̃ACRAagain 
ACRɂȂĂ|̎wEB
VC ̃IC MSDN hLgɎw̕@T
ȂBǂACR̃\[X\[gAԑOɂȂ
̂AGNXv[ŎgpACRƂȂ悤B
̂߂̃ACR̃Gg icon.rc ɒǉB


 Printer

1999-04-23  Tomoyuki Kudou  <kudou@cypac.co.jp>

	* Win32 ̃v^ΉIB

	document.cpp printeri.cpp C
	
	printeri.cpp ́AExtDeviceMode()  DocumentProperties()
	ɏāAv^hCo DLL 𒼐ڌĂяo@
	AWin32 API oRŌĂяo@ɕύXBȂ
	 16-bit ̃v^hCóAÕTNʂȂ
	ƌĂяoȂ̂ŁA肪B
	{IɁAPrinterInfo::SetupNewPrinter() SɏB
 	
	document.cpp  Document::Print()  Escape gp
	AWin32 p API ɏB܂AofBO
	 SDK ̃hLgɂ Win32 ł͕sKvƂ̂ƂȂ
	ŁÃ̕R[h𖳌ɂBWin32 ł BANDINFOSTRUCT
	`ĂȂ̂ŁAÕofBOsƂĂ
	̂܂܂̃R[h̓RpCłȂB

 IME

1999-04-21  Tomoyuki Kudou  <kudou@cypac.co.jp>

	* Win32  IME ΉIB

	IME ɂ SendIMEMessage gpC^[tF[X͎̂Ă 
	IMM gB{I pime.{h|cpp}  Win32 pɏNB
	
	 IMM ΉłŎQlɂ́A̒ʂB
	
	uWindows 98 API t@X for Visual Basic Programmersv
	͖k  ASHUWA SYSTEM CO.,LTD.
	
	uInside Windows 1996 N 11  Windows Programming Tips
	{̓VXe𑀂v
	tatsuya

	uVC++ ɂWin32 vO~O Tipsv
	GLXp[g}OleBbNXВAZp]_
	
	܂A삳񂩂́AIME ̃vO~OɂӁB

E PIME ֘ÅOĂ΂Ă֐Xg

PIME::GetOpen()		// IME  ON ǂ𔻒肷
PIME::SetOpen()		// IME  ON ɂ
PIME::SetClosed()	// IME  OFF ɂ
PIME::Create()
PIME::DDEDispatch()
PIME::DefaultConvertWin()
PIME::Destroy()
PIME::GetIgnoreFont()
PIME::GetPending()
PIME::KillFocus()
PIME::PopOpenStatus()
PIME::PushOpenStatus()
PIME::RectConvertWin()
PIME::SetFocus()
PIME::SetFont()
PIME::SetIgnoreFont()
PIME::WordRegister()

 {IȌ^̕ύX

ƂȂ̂Aenum  32 bit ł 32 bit ɂȂĂ_B
16 bit  BeatWord ł enum l̂܂܃t@CɕۑĂ̂ŁA
̕𒍈Ӑ[ȂƁAt@Cǂݍ߂ȂƂɂȂB

Dunit, Iunit  16 bit ł signed int B 32 bit 
ł 32 bit ɂȂĂ܂B16 bit ɂȂ悤Ɍ^ύXB

E32 bit enum ̖
    word v = 0x8000;
    if (v!=0 && v!= 1 && v!= AttsEntry::UNKNOWN)

AttsEntry::UNKNOWN  enum Ƃ 0x8000 ƒ`ĂƂA
 if ͐^Ƃ͂ȂȂBȂȂAword l v  int l 
AttsEntry::UNKNOWN r邽߂ɁAv ͈xAint ɕϊ
ÂƂgA0xffff8000  0x00008000 r
邱ƂɂȂB
̂悤ȃP[X͔Ɍɂ̂ŁAenum lgp鎞ɂ
\ɋCׂłB

 bZ[W̐U镑̕ύX

[/] WM_MDIGETACTIVE

̕ύX́A{Ȃǂł͏ЉĂȂB
̃bZ[W̕ԂlAwin16 ł HIWORD  1 ̂ƂɁAMDI client
ő剻ĂӖAwin32 ł͕Ԃl͒P MDI client 
nhłBwin32 ł lparam ɏԃtÕ|C^nB

 bZ[W̃pbLO̕ύX

[/] WM_MDISETMENU

* win16
wparam : refresh flag
lparam : MAKELPARAM(hmenuFrame, hmenuWindow)

* win32
wparam : hmenuFrame
lparam : hmenuWindow

[/] WM_MENUCHAR

Ȃ

[/] WM_MENUSELECT

* win16
wIDItem = wParam;               /* ڎʎq܂̓j[̃nh */
fwMenu = LOWORD(lParam);        /* j[ tO */
hmenu = (HMENU) HIWORD(lParam); /* j[̃nh */

* win32
uItem = (UINT) LOWORD(wParam);   // menu item or submenu index 
fuFlags = (UINT) HIWORD(wParam); // menu flags 
hmenu = (HMENU) lParam;          // handle to menu clicked 

[/] WM_COMMAND

* win16
idItem = wParam;        /* Rg[܂̓j[ڂID */
hwndCtl = (HWND) LOWORD(lParam); /* Rg[̃nh */
wNotifyCode = HIWORD(lParam);    /* ʒmbZ[W */

* win32
wID = LOWORD(wParam);         // item, control, or accelerator identifier 
wNotifyCode = HIWORD(wParam); // notification code 
hwndCtl = (HWND) lParam;      // handle of control 

- abortpri.cpp:167:  case WM_COMMAND:
- autosave.cpp:49:   case WM_COMMAND:
- border.cpp:40:   case WM_COMMAND:		
- border.cpp:568:   case WM_COMMAND:		
- boxes.cpp:1033:   case WM_COMMAND:
- boxes.cpp:1098:   case WM_COMMAND:
- boxes.cpp:1237:   case WM_COMMAND:
- crash.cpp:24:   case WM_COMMAND:
- defstyle.cpp:36:   case WM_COMMAND:		
- dlg.cpp:236:   case WM_COMMAND:
- dlg.cpp:371:   case WM_COMMAND:
- dlg.cpp:614:   case WM_COMMAND:
- dlg.cpp:678:   case WM_COMMAND:
- dlg.cpp:734:   case WM_COMMAND:
- dlg.cpp:820:   case WM_COMMAND:
- dlg.cpp:858:   case WM_COMMAND:
- dlg.cpp:921:   case WM_COMMAND:
- filedlg.cpp:211:   case WM_COMMAND:
- fileopen.cpp:76:   case WM_COMMAND:
- framedlg.cpp:48:   case WM_COMMAND:
- framedlg.cpp:146:   case WM_COMMAND:
- framedlg.cpp:259:   case WM_COMMAND:		
- framedlg.cpp:404:   case WM_COMMAND:		
- framedlg.cpp:513:   case WM_COMMAND:		
- framedlg.cpp:606:   case WM_COMMAND:		
- layoutdl.cpp:63:   case WM_COMMAND:
- layoutdl.cpp:393:   case WM_COMMAND:
- layoutdl.cpp:490:   case WM_COMMAND:
- layoutdl.cpp:580:   case WM_COMMAND:
- layoutdl.cpp:685:   case WM_COMMAND:
- layoutdl.cpp:783:   case WM_COMMAND:
- layoutdl.cpp:846:   case WM_COMMAND:
- memo.cpp:54:   case WM_COMMAND:
- memo.cpp:167:   case WM_COMMAND:
- menu.cpp:284:   case WM_COMMAND:
mwindow.cpp:334:   case WM_COMMAND:

MainWindow::Dispatch(wParam, lParam) ɂ͐ wParam, lParam nB
=>
LRESULT_T MainWindow::WndProc(MSG_T iMessage, WPARAM_T wParam, LPARAM_T lParam)
ƂčlBĂ΂ Dispatch ́Aׂ
idItem, hwndCtl, wNotifyCode p[^Ƃ֐ɏB

menu }NύX
#ifdef  BW3_DISPATCH
#  define LPARAM_MENU_STATE(notify_code) (notify_code)
#  define MENU_STATE_P(notify_code) (LPARAM_MENU_STATE(notify_code) == PW_MENU_STATE)
#  define IF_MENU_STATE if (MENU_STATE_P(notify_code))
#else /*  BW3_DISPATCH */
// `lParam'Amenu-state`FbN邽߂̒loB
#  define LPARAM_MENU_STATE(lParam) ((int) LOWORD(lParam))
#  define MENU_STATE_P(lParam) (LPARAM_MENU_STATE(lParam) == PW_MENU_STATE)
#  define IF_MENU_STATE if (MENU_STATE_P(lParam))
#endif /*  BW3_DISPATCH */

#ifdef BW3_DISPATCH
  LRESULT_T Dispatch(WORD command, WORD notify_code, HWND hwnd);
#else /* BW3_DISPATCH */
  long Dispatch(int command, long lParam);
#endif /* BW3_DISPATCH */

fBXpb`֘A͊{Iɓ̌^ɂB

* A] ^_^;

mwindow.cpp:465:    return(DefWindowProc(WM_COMMAND, command, lParam));

	MainWindow::DispatchSystemCommand(int command, long lParam) ɗ lParam 
	WM_COMMAND ̃bZ[WpbLOOɂĂB

- numdlg.cpp:33:   case WM_COMMAND:		
- pagebox.cpp:241:   case WM_COMMAND:	
- pref.cpp:1463:   case WM_COMMAND:
- printdlg.cpp:66:   case WM_COMMAND:
- psetdlg.cpp:60:   case WM_COMMAND:
- psetdlg.cpp:71:	SendMessage(WM_COMMAND, nDefID,
- psetdlg.cpp:252:    SendMessage(WM_COMMAND, IDCANCEL,
- pwordpre.cpp:550:	  main_window->SendMessage(WM_COMMAND, IDM_Help_Index);
- regabb.cpp:47:   case WM_COMMAND:
- saveasdl.cpp:87:   case WM_COMMAND:
- searchdl.cpp:80:   case WM_COMMAND:	
- setmark.cpp:45:   case WM_COMMAND:
- sizeadj.cpp:48:   case WM_COMMAND:
- statdlg.cpp:83:   case WM_COMMAND:		
- textindl.cpp:28:   case WM_COMMAND:		
- textindl.cpp:73:   case WM_COMMAND:		
- twonumdl.cpp:38:   case WM_COMMAND:		
- vttime.cpp:59:   case WM_COMMAND:

[/] WM_ACTIVATE

* win16
fActive = wParam;                   /* ANeButO */
fMinimized = (BOOL) HIWORD(lParam); /* ACRtO */
hwnd = (HWND) LOWORD(lParam);       /* EBhẼnh */

* win32
fActive = LOWORD(wParam);           // activation flag 
fMinimized = (BOOL) HIWORD(wParam); // minimized flag 
hwndPrevious = (HWND) lParam;       // window handle 

- pagebox.cpp:198:   case WM_ACTIVATE:

[/] WM_CHARTOITEM

Ȃ

[ ] WM_CTLCOLOR

Ƃ肠Aȉ NCTLCOLOR ̃}Nœ삵Ȃ悤ɂȂĂ邪A
LqȂKv邾낤B

abortpri.cpp:147:   case WM_CTLCOLOR:
abortpri.cpp:296:    hBrush = (HBRUSH) SendMessage(GetParent(hWnd), WM_CTLCOLOR, ps.hdc,

[/] WM_MDIACTIVATE

* win16
/* MDINCAgɑ郁bZ[W */
wParam =  (WPARAM) (HWND) hwndChildAct; /* ANeBuqEBhE */
lParam = 0L;                            /* g܂B0łȂ΂Ȃ܂ */

/* MDIqEBhE󂯎郁bZ[W */
wParam = (WPARAM) fActivate;        /* ANeButO */
fActivate = (BOOL)wParam
hwndAct = (HWND) LOWORD(lParam);    /* ANeBuqEBhE */
hwndDeact = (HWND) HIWORD(lParam);  /* ANeBuqEBhE */

* win32
// Message sent to MDI client 
wParam = (WPARAM) (HWND) hwndChildAct; // child to activate 
lParam = 0;                            // not used; must be zero 
 
// Message received by MDI child 
hwndChildDeact = (HWND) wParam;        // child being deactivated 
hwndChildAct = (HWND) lParam;          // child being activated 
 

ANeButOȂĂ܂̂ŁAvO̓ȅKvB

- docwindo.cpp:1241:  ::SendMessage(client->GetHandle(), WM_MDIACTIVATE, (WPARAM_T)GetHandle(), 0);
- docwindo.cpp:1344:    ::SendMessage(client->GetHandle(), WM_MDIACTIVATE, (WPARAM_T)GetHandle(), 0); 
- docwindo.cpp:2071:   case WM_MDIACTIVATE:
- mdichild.cpp:65:   case WM_MDIACTIVATE:

[/] WM_PARENTNOTIFY

* win16
fwEvent = wParam;         /* Cxg tO */
wValue1 = LOWORD(lParam); /* qEBhẼnhA */
                          /* ܂̓}EX J[\xW */
wValue2 = HIWORD(lParam); /* qEBhE̎ʎqA */
                          /* ܂̓}EX J[\yW */

* win32
fwEvent = LOWORD(wParam);  // event flags 
idChild = HIWORD(wParam);  // identifier of child window 
lValue = lParam;           // child handle, or cursor coordinates 

- boxes.cpp:2194:	// In case of ribbon, WM_PARENTNOTIFY message is sent to main
- mwindow.cpp:191:   case WM_PARENTNOTIFY:

[/] WM_VKEYTOITEM

Ȃ

[/] WM_HSCROLL

* win16
wScrollCode = wParam;      /* XN[ o[ R[h */
nPos = LOWORD(lParam);     /* XN[ {bNX݂̌̈ʒu */
hwndCtl = (HWND) HIWORD(lParam); /* Rg[̃nh */

* win32
nScrollCode = (int) LOWORD(wParam);  // scroll bar value 
nPos = (short int) HIWORD(wParam);   // scroll box position 
hwndScrollBar = (HWND) lParam;       // handle to scroll bar  

- docwindo.cpp:2184:   case WM_HSCROLL:

[/] WM_VSCROLL

* win16
wScrollCode = wParam;      /* XN[ o[ R[h */
nPos = LOWORD(lParam);     /* XN[ {bNX݂̌̈ʒu */
hwndCtl = (HWND) HIWORD(lParam); /* Rg[̃nh */

* win32
nScrollCode = (int) LOWORD(wParam); // scroll bar value 
nPos = (short int) HIWORD(wParam);  // scroll box position 
hwndScrollBar = (HWND) lParam;      // handle to scroll bar 

- docedit.cpp:365:    result = GetDocumentWindow()->SendMessage(WM_VSCROLL, SB_PAGEUP);
- docedit.cpp:369:    result = GetDocumentWindow()->SendMessage(WM_VSCROLL, SB_PAGEDOWN);
- docwindo.cpp:2157:   case WM_VSCROLL:
- docwindo.cpp:2260:	SendMessage(WM_VSCROLL, SB_PAGEUP, 0);
- docwindo.cpp:2263:	SendMessage(WM_VSCROLL, SB_PAGEDOWN, 0);

[/] EM_GETSEL

Ȃ

[/] EM_LINESCROLL

Ȃ

[/] EM_SETSEL

* win16
wParam = (WPARAM) (UINT) fScroll; /* Lbg̃XN[tO */
lParam = MAKELPARAM(ichStart, ichEnd); /* JnʒuяIʒu */

* win32
wParam = (WPARAM) (INT) nStart;    // starting position 
lParam = (LPARAM) (INT) nEnd;      // ending position 

- defstyle.cpp:49:			       EM_SETSEL, 0, MAKELONG(0, 32767));
- memo.cpp:99:           SendItemMessage(IDD_SaveAs_Memo, EM_SETSEL);
- memo.cpp:159:    SendItemMessage(IDD_FileOpen_Memo, EM_SETSEL);

 ^̕ύX

[ ] 32bit EChEvVW

// win16
LONG FAR PASCAL WindowProc (HWND hWnd,
			    WORD MsgID,
			    WORD wParam,
			    LONG lParam);

// win32
LONG WINAPI WindowProc (HWND hWnd,
			UINT MsgID,
			WPARAM wParam,
			LPARAM lParam);

MsgID  wParam  32 bit ɂȂB
wParam  32 bit ɂȂƂɂ 15 ̃bZ[W̎戵ύXɂȂB

[ ] HANDLE  void* ɂȂ

HANDLE  void* łI[o[[hĕʂ̊֐ɂĂ́Aׂ
OċʂB

void GetDIBWidthAndHeight(HANDLE dib, Iunit& width, Iunit& height);
void GetDIBWidthAndHeight(void* cf_dib, Iunit& width, Iunit& height);
=>
void GetDIBWidthAndHeightDIB(HANDLE dib, Iunit& width, Iunit& height);
void GetDIBWidthAndHeightCFDIB(void* cf_dib, Iunit& width, Iunit& height);

 API ̕ύX

[ ] GetTextExtent ȂȂ

GetTextExtent => GetTextExtentPoint32

GetTextExtentPoint32 ɂ SIZE ^̃p[^n悤ɏKvB
SDK ̃hLgɂ GetTextExtentPoint ͌덷𐶂oOƂ̂ƁB

#ifdef _WIN32
  SIZE width_height;
  GetTextExtentPoint32(dc, buffer, 1, &width_height);
  *height = width_height.cy;
  *width = width_height.cx;
#else /* _WIN32 */
  DWORD width_height = GetTextExtent(dc, buffer, 1);
  *height = HIWORD(width_height);
  *width = LOWORD(width_height);
#endif

[ ] MAKEPOINT ȂȂ

#ifdef _WIN32
  POINT p;
  p.x = LOWORD(lParam);
  p.y = HIWORD(lParam);
#else /* _WIN32 */
  POINT p = MAKEPOINT(lParam);
#endif /* _WIN32 */

[ ] MoveTo ȂȂ

MoveTo => MoveToEx

#ifdef _WIN32
  MoveToEx(dc, POINT_X(&dp[0]), POINT_Y(&dp[0]), NULL);
#else /* _WIN32 */
  MoveTo(dc, POINT_X(&dp[0]), POINT_Y(&dp[0]));
#endif /* _WIN32 */

[ ] SetWindowExt ȂȂ

SetWindowExt => SetWindowExtEx

#ifdef _WIN32
	    SetWindowExtEx(dc, 1, 1, NULL);
#else /* _WIN32 */
	    SetWindowExt(dc, 1, 1);
#endif /* _WIN32 */ 

[ ] SetViewportExt ȂȂ

SetViewportExt => SetViewportExtEx

#ifdef _WIN32
	    SetViewportExtEx(dc, -1, 1, NULL);
#else /* _WIN32 */
	    SetViewportExt(dc, -1, 1);
#endif /* _WIN32 */

[ ] SetViewportOrg ȂȂ

SetViewportOrg => SetViewportOrgEx

#ifdef _WIN32
	    SetViewportOrgEx(dc, width, 0, NULL);
#else /* _WIN32 */
	    SetViewportOrg(dc, width, 0);
#endif /* _WIN32 */

[ ] GetBitmapDimension ȂȂ

GetBitmapDimension => GetBitmapDimensionEx

#ifdef _WIN32
  SIZE size;
  ::GetBitmapDimensionEx(hBitmap, &size);
  WORD mm0_width = size.cx;
  WORD mm0_height = size.cy;
#else /* _WIN32 */
  DWORD size = ::GetBitmapDimension(hBitmap);
  WORD mm0_width = LOWORD(size);
  WORD mm0_height = HIWORD(size);
#endif /* _WIN32 */

[ ] SetBrushOrg ȂȂ

SetBrushOrg => SetBrushOrgEx

#ifdef _WIN32
  SetBrushOrgEx(dc, p.x, p.y, NULL);
#else /* _WIN32 */
  SetBrushOrg(dc, p.x, p.y);
#endif /* _WIN32 */

[ ] SetWindowsHook ȂȂ

SetWindowsHook => SetWindowsHookEx

͑ρB
ԂĺAFARPROC  HHOOK ^ɂȂB

#ifdef _WIN32
  old_hook_handle = ::SetWindowsHookEx(WH_MSGFILTER, 
				       (HOOKPROC)PWordPresentation::HelpHookProc,
				       PWordPresentation::hInstance,
				       0);
#else /* _WIN32 */
  old_hook_proc = ::SetWindowsHook(WH_MSGFILTER, 
				   (FARPROC)PWordPresentation::HelpHookProc);
#endif /* _WIN32 */


[ ] DefHookProc ȂȂ

DefHookProc => CallNextHookEx

͑ρBSetWindowsHook ̏ƈꏏɕύXKvB

#ifdef _WIN32
    return (int)::CallNextHookEx(PWordPresentation::old_hook_handle,
                                 nCode, wParam, lParam)
#else /* _WIN32 */
    return(int)::DefHookProc(nCode, wParam, lParam, 
			     &PWordPresentation::old_hook_proc);
#endif /* _WIN32 */

[ ] LoadLibrary ̕Ԃl̃G[̈ς

HINSTANCE LoadLibary(LPCSTR)

Win32 ł NULL ԂƂɃG[ɂȂ

[ ] DlgDirSelect ȂȂ

DlgDirSelect => DlgDirSelectEx

#ifdef _WIN32
	::DlgDirSelectEx(this->GetHandle(), current_name, strlen(current_name), ID_FILES);
#else /* _WIN32 */
	::DlgDirSelect(this->GetHandle(), current_name, ID_FILES);
#endif /* _WIN32 */

 bZ[W̎dl̕ύX

[ ] WM_MDIGETACTIVE

ȑO͕Ԃl LOWORD  mdi client handle ĂA
Win32 ł́AԂl handle ̂́B

#ifdef _WIN32
  HWND hWndChild = this->SendMessage(WM_MDIGETACTIVE);
#else /* _WIN32 */
  HWND hWndChild = LOWORD(this->SendMessage(WM_MDIGETACTIVE));
#endif /* _WIN32 */

 ȂȂ֐

[ ] _fstrchr

 Win32 version ̔

#include <windows.h>

void main()

{
   DWORD dwVersion;
   char szVersion[80];

   dwVersion = GetVersion();

#if defined (WIN32)

   if (dwVersion < 0x80000000) {
   // Windows NT
       wsprintf (szVersion, "Microsoft Windows NT %u.%u (Build: %u)",
                (DWORD)(LOBYTE(LOWORD(dwVersion))),
                (DWORD)(HIBYTE(LOWORD(dwVersion))),
                (DWORD)(HIWORD(dwVersion)));
   }
   else if (LOBYTE(LOWORD(dwVersion))<4) {

   // Win32s
       wsprintf (szVersion, "Microsoft Win32s %u.%u (Build: %u)",
                (DWORD)(LOBYTE(LOWORD(dwVersion))),
                (DWORD)(HIBYTE(LOWORD(dwVersion))),
                (DWORD)(HIWORD(dwVersion) & ~0x8000));
   } else {

   // Windows 95
       wsprintf (szVersion, "Microsoft Windows 95 %u.%u (Build: %u)",
                (DWORD)(LOBYTE(LOWORD(dwVersion))),
                (DWORD)(HIBYTE(LOWORD(dwVersion))),
                (DWORD)(HIWORD(dwVersion) & ~0x8000));
   }
#else
       wsprintf (szVersion, "Microsoft Windows %u.%u - MS-DOS %u.%u",
                (DWORD)(LOBYTE(LOWORD(dwVersion))),
                (DWORD)(HIBYTE(LOWORD(dwVersion))),
                (DWORD)(HIBYTE(HIWORD(dwVersion))),
                (DWORD)(LOBYTE(HIWORD(dwVersion))));
#endif
   MessageBox( NULL, szVersion, "Version Check", MB_OK );
}
  
